reduceの構文に問題があります。私は、この関数の値の総和を見つけるために減らす使用したいハッシュ値を減らす
H = {"Key1" => 1, "Key2" => 2}
:私は、次の形式のハッシュを持っています。私は、これは間違っている知っている
H.reduce(0) {|memo, elem| memo+=elem}
同様
何か。私はどのように私がハッシュの値をelemにすることができるのかわかりません。
reduceの構文に問題があります。私は、この関数の値の総和を見つけるために減らす使用したいハッシュ値を減らす
H = {"Key1" => 1, "Key2" => 2}
:私は、次の形式のハッシュを持っています。私は、これは間違っている知っている
H.reduce(0) {|memo, elem| memo+=elem}
同様
何か。私はどのように私がハッシュの値をelemにすることができるのかわかりません。
使用Enumerable#reduce
を空:
H.values.reduce(:+) # => 3
Hash.new.values.reduce(:+) # => nil
安全0
ハッシュが空の場合、使用取得するには:
H.values.reduce(0) { |sum,x| sum + x } # or...
H.reduce(0) { |sum,(key,val)| sum + val } # ...if you need to inspect the key
はここでキックのために、迅速なベンチマークだが。むしろ、キー/値ペアからの値よりも値だけを減らすために若干速いように見えることに注意してください:
user system total real
H.values.reduce(:+) 4.510000 0.080000 4.590000 ( 4.595229)
H.values.reduce(0) {...} 4.660000 0.080000 4.740000 ( 4.739708)
H.reduce(0) {...} 5.160000 0.070000 5.230000 ( 5.241916)
require 'benchmark'
size = 1_000
hash = Hash[* Array.new(size*2) { rand } ]
N=10_000
Benchmark.bm(24) do |x|
x.report('H.values.reduce(:+)') { N.times { hash.dup.values.reduce(:+) } }
x.report('H.values.reduce(0) {...}') { N.times { hash.dup.values.reduce(0) { |sum,x| sum + x } } }
x.report('H.reduce(0) {...}') { N.times { hash.dup.reduce(0) { |sum,(_,v)| sum + v } } }
end
ハッシュが空の場合、これは0を返しません。 cool(key、val)proc argの構文には、 –
h = {"Key1" => 1, "Key2" => 2}
h.values.inject(0){|f,v| f += v.to_i }
# => 3
または
h.values.inject(:+)
# => 3
このお試しください:ハッシュがあることを起こる場合は、nil
を取得して、OKなら、
H.reduce(0) { |memo, elem| memo += elem[1] }
または
H.reduce(0) { |memo, (key, value)| memo += value }
私は 'memo + value'を書いて、' memo'の更新が役に立つと思うようにするでしょう。 – lkuty
は、私は私はこの1つを掘削しています知っていますが、Railsのを使用するために起こる場合は、.sum
methodは助けることができる:
H = {"Key1" => 1, "Key2" => 2}
=> {"Key1"=>1, "Key2"=>2}
> H.values.sum
=> 3
私はそれだけでこの答えを入力した後のRails固有気づいた
> {}.values.sum
=> 0
> {}.values.reduce(:+)
=> nil
:
利点は、それが空のハッシュに0
を返すということです。私はOPがRailsタグを追加していないことを知っていますが、それは人が止まるのに便利かもしれないと思いました。
Ruby 2.4.0以降、.sum
is now availableに注意してください。
'.sum'がRuby 2で実装されました。4 [Enumerable#sum](https://ruby-doc.org/core-2.4.0/Enumerable.html#method-i-sum)。 – user3162553
良いキャッチ、私は私の答えで、感謝のメモを追加! – astorije
試行:H.values.reduce(:+) –
ありがとうございます!それはトリックをしました – richsoni