我有两个数组,每个数组都包含带属性哈希的数组。
Array1 => [[{attribute_1 = A}, {attribute_2 = B}], [{attribute_1 = A}, {attribute_4 = B}]]
Array2 => [{attribute_3 = C}, {attribute_2 = D}], [{attribute_3 = C, attribute_4 = D}]]
数组中的每个数组都保存一个对象的属性哈希值。在上面的例子中,我正在使用两个对象。每个数组中有两个属性用于两个对象。
如何合并这两个数组?我试图获得一个'对象'数组的单个数组(从一开始就无法获得单个数组,因为我必须进行两次不同的API调用才能获得这些属性)。
DesiredArray => [[{attribute_1 = A, attribute_2 = B, attribute_3 = C, attribute_4 = D}],
[{attribute_1 = A, attribute_2 = B, attribute_3 = C, attribute_4 = D}]]
我尝试了一些东西,包括迭代方法和合并方法,但我一直无法得到我需要的数组。
答案 0 :(得分:5)
您似乎有并行的哈希数组。我们可以使用zip
将并行数组转换为哈希数组的单个数组。然后,我们可以使用inject
和merge
将每个哈希数组映射到一个哈希:
#!/usr/bin/ruby1.8
require 'pp'
array1 = [{:attribute_1 => :A, :attribute_2 => :B}, {:attribute_1 => :A, :attribute_4 => :B}]
array2 = [{:attribute_3 => :C, :attribute_2 => :D}, {:attribute_3 => :C, :attribute_4 => :D}]
pp array1.zip(array2).collect { |array| array.inject(&:merge) }
# => [{:attribute_2=>:D, :attribute_1=>:A, :attribute_3=>:C},
# => {:attribute_4=>:D, :attribute_1=>:A, :attribute_3=>:C}]
答案 1 :(得分:1)
我认为我的答案不再有效,因为问题已在稍后编辑。
在这里,首先我要在您的问题中修复数组和哈希表示法。
Array1 = [{'attribute_1' => 'A', 'attribute_2' => 'B'}, {'attribute_1' => 'A', 'attribute_2' => 'B'}]
#=> [{"attribute_1"=>"A", "attribute_2"=>"B"}, {"attribute_1"=>"A", "attribute_2"=>"B"}]
Array2 = [{'attribute_3' => 'C', 'attribute_2' => 'D'}, {'attribute_3' => 'C', 'attribute_4' => 'D'}]
#=> [{"attribute_2"=>"D", "attribute_3"=>"C"}, {"attribute_3"=>"C", "attribute_4"=>"D"}]
您可以简单地连接两个数组以获得所需的数组:
DesiredArray = Array1+Array2
# => [{"attribute_1"=>"A", "attribute_2"=>"B"}, {"attribute_1"=>"A", "attribute_2"=>"B", {"attribute_2"=>"D", "attribute_3"=>"C"}, {"attribute_3"=>"C", "attribute_4"=>"D"}]