2013-04-13 55 views
2

是否有可能採取Hash在紅寶石如紅寶石:通過排序哈希鍵和平分決勝價值

{"aaa" => 255, "abc" => 255, "acb" => 255, "dcv" => 2300, "abe" => 1} 

而且在整理成一個Array像這樣

[["dcv", 2300], ["aaa", 255], ["abc" => 255], ["acb" => 255], ["abe", 1]] 

使用sort_by方法?這種排序應該會產生一個數組數組,它​​首先按數字出現次序降序排列,然後按照字符串升序排序。

回答

4
h = {"aaa" => 255, "abc" => 255, "acb" => 255, "dcv" => 2300, "abe" => 1} 
h.sort_by { |k,v| [-v,k] } 
# => [["dcv", 2300], ["aaa", 255], ["abc", 255], ["acb", 255], ["abe", 1]] 
+0

欲瞭解更多背景的另一種方式也見:http://www.rubyinside.com/how-to/ruby-sort-hash –

+0

不能單純使用'h.sort_by {| k,v | -v}'? –

+1

@yossarian意外工作。當哈希的順序改變時,它將失敗tiebreak規則。 – steenslag

0

解決它

h = h.sort_by { |k,v| v }.reverse 

puts h.inspect