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 回答