2016-02-26 155 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