Ваш вопрос все еще очень запутанный. Я предполагаю, что у вас есть этот ввод:
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