[Ruby]配列やハッシュ内の合計値を算出する方法とは?

配列

injectメソッド

・配列内のすべての数値を合計する

array = [1,2,3,4,5,6,7,8,9,10]
array.inject(:+)

=> 55

*上記のように、演算子をシンボルで渡す。


・配列内の条件に合致した数値を合計する

array = [1,2,3,4,5,6,7,8,9,10]
array.select{ |num| num %3 == 0 }.inject(:+)

=> 18

*selectメソッドで条件を指定する。

sumメソッド

*sumメソッドはRuby2.4以上で使える。→ sumの方が便利!

・配列内のすべての数値を合計する

array = [1,2,3,4,5,6,7,8,9,10]
array.sum

=> 55

・配列内の条件に合致した数値を合計する

array = [1,2,3,4,5,6,7,8,9,10]
array.select{ |num| num %3 == 0 }.sum

=> 18

ハッシュ

・ハッシュ内のvalueを合計したい

hash = {a: 200, b: 200, c: 200, d: 200, f: 200}
hash.values.sum

=> 1000

*inject(:+)でも可能

配列内のハッシュ

・sum

tests = [{ id: 1, score: 100 }, { id: 2, score: 200 }, { id: 3, score: 300 }]
tests.sum { |hash| hash[:score]}

=> 600

・inject

tests = [{ id: 1, score: 100 }, { id: 2, score: 200 }, { id: 3, score: 300 }]
tests.inject(0) { |sum, hash| sum + hash[:score]}

=> 600

*injectで合計を求める際、要素が空の場合0ではなくnilが返ってくるため、上記のように初期値を設定する必要がある。

タイトルとURLをコピーしました