ruby - Ruby 哈希值的频率

标签 ruby hash dictionary

如果我有像这样的图书评级散列

books = {"Gravity's Rainbow"=>:splendid,
         "House in Hyde Park"=>:splendid, 
         "The Week"=>:quite_good
        }

我想计算特定值或评分的出现次数,这是怎么做到的?

我试过 books.values[:splendid].length - 但我想这个错误是因为它认为我想把所有东西都切成“splendid”,这是错误的类型,来自“books.values”。

如何从 books.values 中删除“:splendid”以外的所有内容?我应该查看列表操作而不是哈希吗?我是 Ruby 的新手,一边打字一边思考。我不确定 books.values 是否返回了列表或其他类型?

最佳答案

books.values 返回一个数组:

books.values
#=> [:splendid, :splendid, :quite_good]

所以你可以使用Array#count :

books.values.count(:splendid)
#=> 2

或者像这样计算所有值:

Hash[books.group_by { |k, v| v }.map { |k, v| [k, v.count] }]
#=> {:splendid=>2, :quite_good=>1}

关于ruby - Ruby 哈希值的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19140085/

相关文章:

ruby - 使用事件存储在 rails 中附加 seed.rb 文件中的图像

android - 在 Linux 操作系统 (Ubuntu) : Android Facebook SDK 中生成发布 key 哈希

c++ - 通过给定点的最小线数

java - 侧向卷轴上使用什么瓷砖存储结构?

ruby - 在非 Rails/Rack 项目中使用 Sprockets — rake 编译命令出现错误

ruby - 你怎么说不等于在 Ruby 中?

c++ - 如何在 C++ 中使用 Cmap。将 CString 映射到 UINT

class - Groovy: map 文字上的 getClass 方法返回 null

python - 遵循层次结构的多个嵌套字典

ruby - 将 puppet 路径映射到绝对路径