Объединение двух хеш-массивов в один без изменения пар ключ-значение в Ruby - PullRequest
0 голосов
/ 08 ноября 2018

Привет, у меня есть два хэш-массива следующим образом

A = [{"name" => "rihan"}, {"name" => "gihan"}, {"name" => "mihan"}]
B = [{"value" => "true"}, {"value" => "true"}, {"value" => "true"}]

как объединить их в один массив хешей как [{"name" => "rihan", "value" => true "]

Поскольку мне нужно проверить их по таблице огурцов с разделителями, преобразованной в хэши например | имя | значение | Рихан | правда | | Gihan | правда |

Для таблицы огурцов я использую функцию ниже, чтобы преобразовать ее в хеши

def create_hash_from_data_table table
 table.hashes.each do |hash| ; @table_hash = hash ; end
 return @table_hash
end

А для реального ответа JSON я извлекаю его, используя рекурсивную функцию выше двух хеш-массивов [A] и [B], но я не уверен, как объединить их для сравнения с данными огурца без перезаписи или изменения дублирующихся значений в A [] и B [].

Я попробовал объединить и рекурсивный вариант объединения например array1 = array2.merge (array1)

Пожалуйста, помогите, поскольку метод слияния выдает неопределенную ошибку метода

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Другой вариант, связывание элементов из каждого массива по индексу:

a.map.with_index { |h, i| h.merge(b[i]) }

a #=> [{"name"=>"rihan", :value=>"true"}, {"name"=>"gihan", :value=>"true"}, {"name"=>"mihan", :value=>"true"}]
0 голосов
/ 08 ноября 2018

Ваш вопрос все еще очень запутанный. Я предполагаю, что у вас есть этот ввод:

a = [{"name" => "rihan"}, {"name" => "gihan"}, {"name" => "mihan"}]
b = [{"value" => 1}, {"value" => 2}, {"value" => 3}]

И вы хотите этот вывод:

[{"name"=>"rihan", "value"=>1},
 {"name"=>"gihan", "value"=>2},
 {"name"=>"mihan", "value"=>3}]

Что может быть достигнуто с помощью:

a.zip(b).map { |ar| ar.inject(:merge) }

Или в этом конкретном случае (где массивы после архивирования всегда являются 2-элементными):

a.zip(b).map { |x,y| x.merge(y) }

Как

a.zip(b) #=> [[{"name"=>"rihan"}, {"value"=>1}], [{"name"=>"gihan"}, {"value"=>2}], [{"name"=>"mihan"}, {"value"=>3}]]

А затем каждый элемент массива отображается путем объединения всех его элементов.

Или немного более явная версия с простым циклом:

a.size.times.with_object([]) do |i, output|
  output << a[i].merge(b[i])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...