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