można zrobić to wygląda następująco:
(a + b).group_by(&:first).map { |k, v| [k, v.map(&:last).inject(:+)] }
Najpierw umieść tablice razem z +
, ponieważ nie interesują Cię a
i b
, zależy ci tylko na ich elementach. Następnie group_by
rozdziela połączoną macierz na pierwszy element, dzięki czemu wewnętrzne macierze mogą z łatwością pracować. Następnie musisz wyciągnąć drugi (lub ostatni) element wewnętrznych macierzy przy pomocy v.map(&:last)
i zsumować je z inject(:+)
.
Na przykład:
>> a = [[1,10],[2,20],[3,30]]
>> b = [[1,50],[3,70]]
>> (a + b).group_by(&:first).map { |k,v| [k, v.map(&:last).inject(:+)] }
=> [[1, 60], [2, 20], [3, 100]]
Próbowałem za pomocą Array # assoc ale Haven w stanie zrobić to dobrze. – Agush