Org*_*cat 7 sorting ruby-on-rails
我的hashmap如下:
variable_name[user] = { url, datetime }
variable_name[user] << { url1, datetime1 }
variable_name[user] << { url2, datetime2 }
variable_name[user] << { url3, datetime3 }
Run Code Online (Sandbox Code Playgroud)
如果可能,我如何在RoR中按日期时间对此进行排序?
edit:variable_name是一个哈希,[user]是一个键.值是一个数组
Max*_*unn 10
假设variable_name是一个数组,你的意思是:
variable_name[user] = {:url => url, :datetime => datetime }
Run Code Online (Sandbox Code Playgroud)
一种简单的升序排序方法:
variable_name.sort_by {|vn| vn[:datetime]}
Run Code Online (Sandbox Code Playgroud)
要对降序进行排序,您可以使用完整排序:
variable_name.sort {|vn1, vn2| vn2[:datetime] <=> vn1[:datetime]}
Run Code Online (Sandbox Code Playgroud)
可以在 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] }
Run Code Online (Sandbox Code Playgroud)
会给你结果:
[
[: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}]
]
Run Code Online (Sandbox Code Playgroud)
不过,将其映射回哈希值并不是非常困难。