2012-09-10 2 views
2

이것은 내 해시입니다.Ruby 해시 - 값 및 인쇄 키순으로 정렬

=> {"f11"=>1, "f12"=>3, "f13"=>3, "f07"=>5, "f10"=>1} 

큰 값에서 작은 값까지 정렬 한 다음 키 배열을 만들고 싶습니다.

h.keys.sort {|a, b| h[b] <=> h[a]} 

희망하는 데 도움이 :

=> ["f07", "f12", "f13", "f11", "f10"] 
+0

난 당신이 또한 값이 동일 할 때 키를 주문하려는 것 같아요? – oldergod

답변

4

여기 당신을 위해 한 줄 (! 내가 루비를 사랑)입니다!

+0

wow 이것이 정확히 무엇입니까? 필요한 것. 너 대 남자. –

1
a = {"f11"=>1, "f12"=>3, "f13"=>3, "f07"=>5, "f10"=>1} 
b = Hash[a.sort_by{|k,v| v}] 
puts b.keys.reverse 
+0

감사합니다. 어떻게 키를 배열에 넣을 수 있습니까? –

+0

해시에서 키를 호출하면 배열 배열이 반환됩니다.이 경우 b.keys는 값이 내림차순으로 정렬되기를 원하기 때문에 배열 자체를 반환합니다. – saihgala

+0

nm, 위에 답변했습니다. –

3

해시에는 sort 및 sort_by와 같은 메소드를 제공하는 Enumerable 모듈이 있습니다.이 경우 sort_by를 사용하여 값의 순서에 따라 콜렉션을 얻을 수 있습니다.

h={"f11"=>1, "f12"=>3, "f13"=>3, "f07"=>5, "f10"=>1} 
h.sort_by{ |key, value| -value } 
=> [["f07", 5], ["f12", 3], ["f13", 3], ["f11", 1], ["f10", 1]]