按照数组中的日期时间对哈希表进行排序

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]是一个键。值是一个数组。
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]}

9
variable_name.sort_by {|vn| vn[:datetime]}.reverse 这样写也可以实现倒序排序,相对来说更易懂一些。 - patcon
可以用。谢谢! - Peter Bloom

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

不过将其映射回哈希表并不是非常困难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接