2016-02-26 147 views
0

我有散列的一个这样的数组的数组最近的日期值:如何从哈希

hashes = [{date: Date.today, value: 1}, 
      {date: Date.today - 1.day, value: 2}, 
      {date: Date.today - 2.day, value: 3}, 
      {date: Date.today + 1.day, value: 4} 
] 

我想最近的日期。我可以得到:

hashes.sort{|i| i[:date]}.first[:date] 
# => Sat, 27 Feb 2016 

但我觉得它有点多余。有没有更好的方法来实现这种行为?

+0

不你的代码给你最旧的(最早)日期?或者这是你的英语问题? – sawa

回答

4

你可以不喜欢它:

hashes.max_by{|h| h[:date]}[:date] 

hashes.map{|h| h[:date]}.max 
0

红宝石让你.max.min。所以,你总是要创建新的日期数组,并使用Ruby的方法:

date_array.min # => Oldest date 
date_array.max # => Most recent date 

由于泽的回答提示:hashes.map{|h| h[:date]}.max是伟大的。您使用.map来创建一个新的日期数组,并使用ruby函数.max来确定最近的日期。

我看到你正在尝试使用排序方法,但我建议你不要这样做,因为当你只需要元素来查看计算值是最大还是最小时,排序就会是浪费。

FYI:http://ruby-doc.org/core-2.3.0/Enumerable.html#method-i-max_by