如果我有像这样的图书评级散列
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/