Rubyでハッシュ値を合計する最良の方法は何ですか:
@price = { :price1 => "100", :price2 => "100", :price3 => "50" }
私は今このようなことをしています:
@pricepackage = @price[:price1] + @price[:price2] + @price[:price3] + 500
答えを説明してください。方法だけでなく、理由も知りたいです。=)
できるよ:
@price.values.map(&:to_i).inject(0, &:+)
編集:説明を追加
したがって、@price.values は、ハッシュのすべての値を収集する配列を返します。それは例えば["1", "12", "4"]
です。次に、この配列の各要素に.map(&:to_i)
適用されるため、 が得られます。最後に、初期値 0 で inject をプリフォームし、関数 を使用して累積するため、最後のステップで配列のすべての要素を合計します。to_i
[1,12,4]
.inject(0,&:+)
+
データセットが次のようになっている場合:
prices = {price1: 100, price2: 100, price3: 50}
次に、これは値を合計します:
prices.values.inject(0) {|total, v| total += v}
複雑にしないでおく
@prices = ....
@price = 0.0
@prices.each do |p|
@price += p
end