繁体   English   中英

将2d数组或哈希数组在rails上进行排序

[英]sort 2d array or array of hashes in ruby on rails

根据什么使排序更容易,我可以有一个数组数组或一个哈希数组。 例如

我有idother 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM