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}
}
4

2 に答える 2

3

ハッシュに順序がある Ruby 1.9 を使用していると仮定します。

Hash[data.sort_by { |key, h| [-h[:count], h[:created_at]] }]
于 2012-09-06T19:41:35.310 に答える
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
于 2012-09-06T19:42:26.190 に答える