8

私のハッシュマップは次のとおりです。

variable_name[user] = { url, datetime }
variable_name[user] << { url1, datetime1 }
variable_name[user] << { url2, datetime2 }
variable_name[user] << { url3, datetime3 }

RoRで可能であれば、これを日時で並​​べ替えるにはどうすればよいですか?

編集:variable_nameはハッシュ、[user]はキーです。値は配列です

4

2 に答える 2

12

variable_nameが配列であり、次のような意味であると仮定します。

variable_name[user] = {:url => url, :datetime => datetime }

昇順で並べ替える簡単な方法:

variable_name.sort_by {|vn| vn[:datetime]}

降順で並べ替えるには、完全な並べ替えを使用できます。

variable_name.sort {|vn1, vn2| vn2[:datetime] <=> vn1[:datetime]}
于 2012-10-07T18:41:41.040 に答える
1

Ruby では何でも並べ替えることができますが、並べ替えられた配列になってしまうことに注意してください。Ruby 1.9 以降、ハッシュには内部順序がありますが、Hash#sort メソッドは依然として配列を返します。

例えば:

hash = {
  user1: { name: 'Baz', date: Time.current },
  user2: { name: 'Bar', date: Time.current - 1.month },
  user3: { name: 'Foo', date: Time.current - 2.months },
}

hash.sort { |x, y| x.last[:date] <=> y.last[:date] }

結果が得られます:

[
  [:user3, {:name=>"Foo", :date=>Tue, 07 Aug 2012 20:32:23 CEST +02:00}],
  [:user2, {:name=>"Bar", :date=>Fri, 07 Sep 2012 20:32:23 CEST +02:00}],
  [:user1, {:name=>"Baz", :date=>Sun, 07 Oct 2012 20:32:23 CEST +02:00}]
]

ただし、それをハッシュにマップすることはそれほど難しくありません。

于 2012-10-07T18:37:38.627 に答える