我有一系列像这样的哈希:
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 :(得分:5)
你可以这样做:
hashes.max_by{|h| h[:date]}[:date]
或
hashes.map{|h| h[:date]}.max
答案 1 :(得分:0)
Ruby为您提供.max
和.min
。所以你总是想创建新的日期数组并使用ruby的方法:
date_array.min # => Oldest date
date_array.max # => Most recent date
萨瓦的回答表明:hashes.map{|h| h[:date]}.max
很棒。您可以使用.map
创建新的日期数组,并使用ruby函数.max
来确定最近的日期。
我看到你正在尝试使用sort方法,但我建议你不要这样做,因为当你只需要元素来查看计算值是最大还是最小时,sort会有点浪费。
仅供参考:http://ruby-doc.org/core-2.3.0/Enumerable.html#method-i-max_by