[ruby]injectを使って配列の合計値を求める
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(:+)の形式を使っていこうと思いました。