我想知道如何将这两个数组合并到Ruby中的一个干净数组中 两个阵列共享一个相似的键:值对。我正在尝试合并来自这两个具有同一人信息的独立数组的信息。一个阵列有他的名字。另一个阵列有他的工作和年龄。两个数组的id都与同一个人匹配 我正在尝试做的一个例子
array1 = [ {:id => 1, :name => "Bob"}, {:id => 2, :name => "Tim"}]
array2 = [ {:id => 1, :job => "firefighter", :age => 25}, { :id => 2, :job => "accountant", :age => 30} ]
new_array = [ {:id=> 1, name => "Bob", :job => "firefighter", :age => 25}, { :id => 2, :name => "Tim", :job => "accountant", :age => 30} ]
答案 0 :(得分:3)
你可以这样做:
new_array = array1.each_with_index.map { |x, i| x.merge array2[i] }
# => [{:id=>1, :name=>"Bob", :job=>"firefighter", :age=>25}, {:id=>2, :name=>"Tim", :job=>"accountant", :age=>30}]
如果您想要一个不依赖于数组顺序的解决方案,而是使用:id
来匹配哈希值:
array1.map { |x| x.merge (array2.find { |h| h[:id] == x[:id] } || {}) }
答案 1 :(得分:1)
如果两个数组在相同位置包含相同的:id
值:
array1.zip(array2).map { |g,h| g.merge(h) }
#=> [{:id=>1, :name=>"Bob", :job=>"firefighter", :age=>25},
# {:id=>2, :name=>"Tim", :job=>"accountant", :age=>30}]
或等效地:
[array1, array2].transpose.map { |g,h| g.merge(h) }
如果两个数组包含相同的:id
值,但不一定在同一位置:
(array1 + array2).group_by { |h| h[:id] }
.values
.map { |g,h| g.merge(h) }
或
array1.sort_by { |h| h[:id] }
.zip(array2.sort_by { |h| h[:id] } )
.map { |g,h| g.merge(h) }