4

次のような本の評価のハッシュがある場合

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

特定の値または評価の出現回数をカウントしたいのですが、これはどのように行われますか?

私は試しbooks.values[:splendid].lengthましたが、「books.values」から間違ったタイプの「splendid」まですべてをスライスしたいと考えているため、エラーが発生したと思います。

から「:splendid」以外のものをすべて削除するにはどうすればよいbooks.valuesですか? ハッシュではなくリスト操作を検討する必要がありますか? 入力しながら考えながら Ruby を使用するのはまったくの初心者です。books.valuesリストまたは他のタイプが返されたかどうかはわかりませんか?

4

2 に答える 2

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}
于 2013-10-02T15:01:41.900 に答える