配列
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が返ってくるため、上記のように初期値を設定する必要がある。