@xxx44yyy

Как объединить три массива хешей?

Есть три массива

[
   { year: 2000, a: 10},
   { year: 2001, a: 20}
]


[
   { year: 2000, b: 100},
   { year: 2001, b: 200}
]


[
   { year: 2000, c: 1000},
   { year: 2001, c: 2000}
]


Хочу получить такое:

[
   { year: 2000, a: 10, b: 100, c: 1000},
   { year: 2001, a: 20, b: 200, c: 2000}
]


Как это сделать? merge не помог :(
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
0xD34F
@0xD34F
a.map.with_index{|n, i| n.merge(b[i]).merge(c[i])}

или, если не гарантируется, что количество элементов и их порядок одинаковы:

(a + b + c).group_by{|n| n[:year]}.map{|i, n| n.reduce({}, :merge)}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
2ord
@2ord
Выбрать 1-й массив как целевой.
Проходя по элементам 2-го в каждом из них извлечь год (ключ :year) и найти первое вхождение в 1-ом. Именно с ним и нужно выполнить слияние.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы