/ ruby

Kiel kombini hakettablojn en Rubeno

Hodiaŭ mi bezonas kombini du hakettablojn, kie se mi havas valorojn en ambaŭ tabloj por la sama ŝlosilo, mi volas aldoni la valorojn.

La metodo merge havas la solvon, ĝi povas akcepti blokon por tiu kazo.

  unu = { a: 1, b: 2 }
  du  = { b: 3, c: 4 }

  unu.merge(du) { |ŝlosilo, v1, v2| v1 + v2}

Kompreneble, oni povas uzi iun ajn metodon en la bloko, mi simple bezonis aldonon. Por kombini tutan liston de tablojn oni povas uzi reduce

listo = [{a: 1, b: 2}, {b: 3, c: 4}, {d: 10} ]
listo.inject{ |memo, el| memo.merge( el ){ |ŝlosilo, v1, v2| v1 + v2 } }
#=> {:a=>1, :b=>5, :c=>4, :d=>10}

inject ankaŭ nomiĝas reduce en Rubeno aŭ foldl en Haskelo.