[英]sort 2d array or array of hashes in ruby on rails
根据什么使排序更容易,我可以有一个数组数组或一个哈希数组。 例如
我有id
和other fields like
date 视图等。我可以以这种格式获取它
[[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
方法确实令人困惑,我看不到如何访问最小日期或最近三个日期,等等。
很简单。 您需要研究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
可以通过@ArupRakshit的方法访问Min Max,并且要获取“如最小日期或最近3个日期”之类的信息,可以使用sort_by
方法
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}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.