ruby - 减少数组时使用 Hash.new 作为初始值

标签 ruby hash reduce

我有一个这样的数组

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

相关文章:

ruby-on-rails - gem 使用 : cocoon + selectize-rails

ruby - net/imap ruby​​ 不支持指定的 SASL 机制

PHP 短哈希,如 URL 缩短网站

javascript - 将对象数组减少到 JS 中的 HashMap

javascript - 使用 Reduce 而不是链接 Filter 和 Map

ruby - 使用可枚举的内置 Ruby 访问和操作嵌套数据

ruby - Ruby 项目在什么时候变成了 gem?

objective-c - Objective-c (iOS) 中的 MD5 散列,基于共享 key

php - 存储 bcrypt 哈希

javascript - 使用javascript的reduce方法将对象数组转换为每年和每月