我有一个这样的数组
[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/