我有一个像这样的数组

[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/

10-15 13:54