Rubyで配列やハッシュで合計値を求めたい時の書き方たち
配列
配列に入っている値すべてを合計したい時
# 配列に入っている値すべてを合計したい時
array = [1,2,3,4,5,6,7,8,9,10]
array.inject(:+)
- Railsだと以下のようにも書けます
# 配列に入っている値すべてを合計したい
array = [1,2,3,4,5,6,7,8,9,10]
array.sum
条件を満たすものだけを合計したい
# 偶数のものだけを合計したい
array = [1,2,3,4,5,6,7,8,9,10]
array.select{ |num| num %2 == 0 }.inject(:+)
selectは、条件に合う要素だけで新しく配列を作ります。
新しく作られた配列に対して、合計します。
http://ref.xaio.jp/ruby/classes/array/select
Ruby2.4からはsumが使えるようになったのでsumを使って書いたほうが簡潔でわかりやすくかけます。
# 偶数のものだけを合計したい
array = [1,2,3,4,5,6,7,8,9,10]
array.sum{ |num| num %2 == 0 }
Hash
Hashに入っているすべてのvalueを合計したい
# すべてのvalueを合計したい
hash = {a: 10, b: 20, c: 30, d: 40, f: 50}
hash.values.inject(:+)
配列内のハッシュ
特定のkeyのvalueだけ合計したい
# keyがnumberのvalueを合計したい
scores = [{ id: 1, number: 20 }, { id: 2, number: 30}, { id: 3, number: 40}]
scores.inject(0) {|sum, hash| sum + hash[:number]}
- Railsだと以下のようにも書けます
# keyがnumberのvalueを合計したい
scores = [{ id: 1, number: 20 }, { id: 2, number: 30}, { id: 3, number: 40}]
scores.sum { |hash| hash[:number]}