que podría hacerlo de esta manera:
(a + b).group_by(&:first).map { |k, v| [k, v.map(&:last).inject(:+)] }
Primero coloque las matrices junto con +
ya que no le importan a
y b
, solo se preocupa por sus elementos. Luego, el group_by
divide la matriz combinada por el primer elemento para que las matrices internas se puedan trabajar fácilmente. Luego solo tiene que extraer los segundos (o últimos) elementos de las matrices internas con v.map(&:last)
y sumarlos con inject(:+)
.
Por ejemplo:
>> 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]]
He intentado usar el arreglo # Assoc pero no he sido capaz de hacerlo bien. – Agush