合并哈希数组

我有两个数组,每个数组都包含属性哈希的数组。

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}]] 

我尝试了一些东西,包括迭代方法和合并方法,但我一直无法得到我需要的数组。

你似乎有哈希的并行数组。 我们可以使用zip将并行数组转换为哈希数组的单个数组。 然后我们可以使用injectmerge每个哈希数组映射到一个哈希:

 #!/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}] 

我不认为我的答案是有效的,因为这个问题后来被编辑了。

在这里,我首先在您的问题中修复数组和哈希表示法。

 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"}]