根据使排序更容易的原因,我可以拥有一个数组数组或一个哈希数组。 E.g。
我有id
个和other fields like
日期观看次数等。我可以用这种格式获取
[[1,"2014-01-01",50],[2,"2014-02-05",20],...]
或[{:id=>1, :date=> "2014-01-01", :views=>50},{:id=>2,:date=>"2014-02-05",:views=>20}]
现在我需要能够对此进行排序或快速访问分钟/最大值。例如,在我看来,我想调用.max.views
和.min.views
或smth来比较具有最高视图的条目和具有最低视图的条目。
ruby sort_by
方法确实令人困惑,我看不出我如何访问说最短日期或最近3个日期等。
答案 0 :(得分:3)
很简单。您需要查看方法Enumerable#minmax_by
:
hash = [
{:id=>1, :date=> "2014-01-01", :views=>50},
{:id=>2,:date=>"2014-02-05",:views=>20}
]
min,max = hash.minmax_by { |h| h[:views] }
我如何访问说最小日期或最近3个日期等。
require 'date'
# the latest 3 dates
hash.sort_by { |h| Date.strptime(h[:date],"%Y-%m-%d") }.last(3)
# minimum date
hash.sort_by { |h| Date.strptime(h[:date],"%Y-%m-%d") }.first
答案 1 :(得分:1)
Min Max可以通过@ ArupRakshit的方法访问,并且可以使用sort_by
方法获取“最短日期或最近3个日期”等内容
hash = [
{:id=>1, :date=> "2014-01-01", :views=>50},
{:id=>2,:date=>"2014-02-05",:views=>20}
{:id=>3,:date=>"2014-02-10",:views=>100}
{id:=>4, :date=>"2014-03-02",:views=>12}
]
hash.sort_by{|h| h[:views]}
#=>[{:id=>4, :date=>"2014-03-02", :views=>12}, {:id=>2, :date=>"2014-02-05", :views=>20}, {:id=>1, :date=>"2014-01-01", :views=>50}, {:id=>3, :date=>"2014-02-10", :views=>100}]
最短日期:
hash.sort_by{|h| h[:date]}.first
#=> {:id=>1, :date=> "2014-01-01", :views=>50}
最新3个日期:
hash.sort_by{|h| h[:date]}.slice(-3..-1)
#=>[{:id=>2, :date=>"2014-02-05", :views=>20}, {:id=>3, :date=>"2014-02-10", :views=>100}, {:id=>4, :date=>"2014-03-02", :views=>12}]