объединение массивов хэшей - PullRequest
1 голос
/ 01 июня 2010

У меня есть два массива, каждый из которых содержит массивы с хэшами атрибутов.

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

Я пробовал пару вещей, включая методы итерации и метод слияния, но я не смог получить нужный мне массив.

Ответы [ 2 ]

5 голосов
/ 01 июня 2010

У вас, кажется, есть параллельные массивы хэшей. Мы можем использовать 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 голос
/ 01 июня 2010

Я не думаю, что мой ответ более действителен, так как вопрос был отредактирован позже.

Здесь, во-первых, я исправляю ваш массив и хэш-нотацию в вашем вопросе.

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"}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...