2013-10-02 1 views
3

해시, 어떻게 이루어집니다?주파수가

나는 books.values[:splendid].length을 시도했지만, "books.values"의 잘못된 유형 인 "훌륭함"까지 모든 것을 조각 내고 싶다고 생각하기 때문에 오류가 발생했다고 생각합니다.

books.values에서 ": 훌륭함"이 아닌 모든 것을 제거하려면 어떻게해야합니까? 해시가 아닌 목록 작업을 살펴야합니까? 나는 Ruby에 대해 완전히 새로운 것으로, 나는 타이핑 할 때 생각합니다. books.values이 목록이나 다른 형식을 반환했는지 확실하지 않습니다. Enumerable에서의 #count method이 사용

답변

7

books.values하여 단축 할 수는 배열을 반환 :

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

또는이 같은

books.values.count(:splendid) 
#=> 2 
는 모든 값을 계산하려면
4

:

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

그래서 그냥 Array#count를 사용할 수 있습니다 @Stefan 대답으로

books.values.count { |v| v == :splendid } 

, 당신은 또한 단지 books.values.count(:splendid)

관련 문제