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.