2012-09-06 59 views
0

我在努力解決這湊如下:如何排序這個哈希散列

{ 
    17=>{:id=>17, :count=>1, :created_at=>Wed, 05 Sep 2012 19:02:34 UTC +00:00}, 
    14=>{:id=>14, :count=>2, :created_at=>Sun, 02 Sep 2012 19:20:28 UTC +00:00}, 
    9=>{:id=>9, :count=>0, :created_at=>Sun, 02 Sep 2012 17:09:35 UTC +00:00}, 
    10=>{:id=>10, :count=>2, :created_at=>Sat, 01 Sep 2012 17:09:56 UTC +00:00}, 
    11=>{:id=>11, :count=>0, :created_at=>Fri, 31 Aug 2012 19:13:57 UTC +00:00}, 
    12=>{:id=>12, :count=>2, :created_at=>Thu, 30 Aug 2012 19:19:32 UTC +00:00}, 
    13=>{:id=>13, :count=>0, :created_at=>Thu, 23 Aug 2012 19:20:09 UTC +00:00} 
} 

上述哈希應該count進行分類和created_of,看起來像這樣的哈希:

{ 
    12=>{:id=>12, :count=>2, :created_at=>Thu, 30 Aug 2012 19:19:32 UTC +00:00}, 
    10=>{:id=>10, :count=>2, :created_at=>Sat, 01 Sep 2012 17:09:56 UTC +00:00}, 
    14=>{:id=>14, :count=>2, :created_at=>Sun, 02 Sep 2012 19:20:28 UTC +00:00}, 
    17=>{:id=>17, :count=>1, :created_at=>Wed, 05 Sep 2012 19:02:34 UTC +00:00}, 
    13=>{:id=>13, :count=>0, :created_at=>Thu, 23 Aug 2012 19:20:09 UTC +00:00}, 
    11=>{:id=>11, :count=>0, :created_at=>Fri, 31 Aug 2012 19:13:57 UTC +00:00}, 
    9=>{:id=>9, :count=>0, :created_at=>Sun, 02 Sep 2012 17:09:35 UTC +00:00} 
} 
+5

提示:輸入數據應該是可運行的代碼。這裏日期的字符串表示法使得我們不可能在沒有我們每個人手動修復的情況下進行測試。 – tokland

回答

3

假設你正在使用紅寶石1.9有散列順序:

Hash[data.sort_by { |key, h| [-h[:count], h[:created_at]] }] 
+0

非常感謝......... – Kashiftufail

2

在Ruby 1.8中,你不能排序散列作爲散列沒有順序。在Ruby 1.9中,哈希迭代順序由插入順序定義。因此,您必須創建一個新的散列,其中您將按照正確的順序插入元素。

sorted_keys = hash.keys.sort 
sorted_hash = Hash.new 
sorted_keys.each do |k| 
    sorted_hash[k] = hash[k] 
end