Ruby散列中的值的频率

OJF*_*ord 4 ruby hash dictionary

如果我有像书的评级哈希

books = {"Gravity's Rainbow"=>:splendid,
         "House in Hyde Park"=>:splendid, 
         "The Week"=>:quite_good
        }
Run Code Online (Sandbox Code Playgroud)

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

我试过了books.values[:splendid].length- 但是我想错误是因为它认为我想把所有内容从"books.values"中切割成"出色",这是错误的类型.

如何删除所有不是":辉煌"的东西books.values?我应该查看列表操作而不是哈希?我是Ruby的新手,在我输入时思考.我不确定是否books.values已返回列表或其他类型但是?

Ste*_*fan 7

books.values 返回一个数组:

books.values
#=> [:splendid, :splendid, :quite_good]
Run Code Online (Sandbox Code Playgroud)

所以你可以使用Array#count:

books.values.count(:splendid)
#=> 2
Run Code Online (Sandbox Code Playgroud)

或类似的东西来计算所有值:

Hash[books.group_by { |k, v| v }.map { |k, v| [k, v.count] }]
#=> {:splendid=>2, :quite_good=>1}
Run Code Online (Sandbox Code Playgroud)