[ruby]injectを使って配列の合計値を求める


[まとめ] 現在開催中のKindleセール情報はこちら

rubyで配列の合計値を求める際にinjectを使うと便利だったのでメモ

以下のようなHashがあった場合に、値の合計値を求めたくなりました。

targets = {
 a: 10,
 b: 40,
 c: 50,
}

まずシンプルに以下のような形を思いつきます。

# sample1
sum1 = 0
targets.values.each do |val|
  sum1 = sum1 +  val
end
p sum1 #=> 100

これでとりあえずは合計が出ます。

ですがEnumerableクラスのinjectメソッドを使うともっと手軽に書くことができます。

# sample2
sum2 = targets.values.inject(0) { |sum, i| sum + i }
p sum2 #=> 100

inject(0)の0がsample1でいうsum1=0の部分に該当します。

sum + iの部分は同じですね。

これをさらに短く書くと以下のようにも書けるそうです。

# sample3
sum3 = targets.values.inject(:+)
p sum3

というわけで配列の合計値を求める場合はarray.inject(:+)の形式を使っていこうと思いました。

参考

[まとめ] 現在開催中のKindleセール情報はこちら