[Ruby] 同一キーのハッシュ同士の合計値を高速にもとめる(hash.merge)

Pocket

masaoです。最近、太ってきました。そして、おでんのおいしい季節になってきました。

スポンサーリンク

同一キーのハッシュ同士を合計する

タイトルにある、【高速に!】という部分は大袈裟ですが、この方法を知らずに、自分でnil? とかkeys.include? とかを使って計算していたのですが、項目も数千をこえるとと遅い、遅い、遅い!残念な結果に。。。

hash.merge自体も検索すると「遅い」と出てきますが、自分でやるよりは随分と高速な結果になりました。。。では、サンプルコードをどうぞ。

h1 = {"2021-12-1" => 1, "2021-12-2" => 4, "2021-12-3" => 3}
h2 = {"2021-12-1" => 5, "2021-12-2" => 1, "2021-12-3" => 3}
mh = h1.merge(h2){|key, v1, v2| v1 + v2}

# mh {"2021-12-1" => 6, "2021-12-2" => 5, "2021-12-3" => 6}

# このサンプルでは、キーがどちらのハッシュも同じであるが、一方にしかないキーの値は
# 合計されずにそのままの値でマージされる
#

(おまけ)ちょっと前に登山した時の紅葉の写真

うむ~~~。快晴とはいかず。。。

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *