如果我有像
这样的图书评级books = {"Gravity's Rainbow"=>:splendid,
"House in Hyde Park"=>:splendid,
"The Week"=>:quite_good
}
我想计算特定值或评级的出现次数,这是怎么做的?
我试过了books.values[:splendid].length
- 但我想错误是因为它认为我想把所有内容从“books.values”中切割成“出色”,这是错误的类型。
如何从books.values
删除所有不是“:splendid”的内容?我应该查看列表操作而不是哈希?我是Ruby的新手,在我输入时思考。我不确定books.values
是否已返回列表或其他类型?
答案 0 :(得分:7)
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}
答案 1 :(得分:4)
使用Enumerable的#count method:
books.values.count { |v| v == :splendid }
正如@Stefan回答的那样,你也可以通过books.values.count(:splendid)