Help us understand the problem. What is going on with this article?

Rubyで、hashをmergeするときに、同一keyの場合はvalueを集計したいとき

More than 1 year has passed since last update.

例えば、keyに日付が入っており、valueに値が入っているhashが2つあり、

scores1 = [ {'2018-07-01', 1},   {'2018-07-03', 2},  {'2018-07-04', 3} ]
scores2 = [ {'2018-07-02', 1},   {'2018-07-03', 1},  {'2018-07-05', 2} ]

そのhashを以下のようにマージしたい(同一keyの場合は値を合計したい)場合

sum_score = [{'2018-07-01', 1}, {'2018-07-02', 1},  {'2018-07-03', 3},  {'2018-07-04', 3},  {'2018-07-05', 2} ]

ループ回しながらKeyを判定して・・とかやらなくても、こうすることで簡単にできます。

sum_score = scores1.merge(scores2) do |key, oldval, newval|
    # 同一keyの場合はsumを行う
    oldval + newval
end

同じことで困った人のために、メモとして残しておきます。
配列や連想配列の集計は色々便利なやり方があるようです。

参考URL:
https://ref.xaio.jp/ruby/classes/hash/merge

tamiorock
10年ぐらいiOSアプリを趣味と仕事で作ってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away