我有一个像这样的数组
[1,1,2,3,3,3,4,5,5]
我想计算每个数字的出现次数
[1,1,2,3,3,3,4,5,5].reduce(Hash.new(0)) { |hash,number| hash[number] += 1 }
问题是当我尝试运行它时出现以下错误
NoMethodError: undefined method `[]=' for 1:Fixnum
from (irb):6:in `block in irb_binding'
from (irb):6:in `each'
from (irb):6:in `reduce'
from (irb):6
我可以像这样设置初始值,还是我弄错了?
最佳答案
您可以将 each_with_object
用于更简洁的语法
[1,1,2,3,3,3,4,5,5].each_with_object(Hash.new(0)) { |number, hash| hash[number] += 1 }
请注意,参数的顺序是相反的,即
|number, hash|
关于ruby - 减少数组时使用Hash.new作为初始值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19201124/