2014-03-12 123 views
0

我有散列其键哈希值排序阵列

arr = [ 
    { :tap=> "bucket", :mobile=> "charger", :apple=> "knife", :gifted => "true" }, 
    { :tap=> "bucket", :mobile=> "charger", :apple=> "knife" }, 
    { :tap=> "bucket", :mobile=> "charger", :apple=> "knife" }, 
    { :tap=> "bucket", :mobile=> "charger", :apple=> "knife", :gifted => "true" } 
] 

我尝试的基础上,阵列哈希排序的数组:优=>“真”。这样

sorted = [ 
    { :tap=> "bucket", :mobile=> "charger", :apple=> "knife", :gifted => "true" }, 
    { :tap=> "bucket", :mobile=> "charger", :apple=> "knife", :gifted => "true" } 
    { :tap=> "bucket", :mobile=> "charger", :apple=> "knife" }, 
    { :tap=> "bucket", :mobile=> "charger", :apple=> "knife" } 
] 

回答

4
arr.sort_by{|h| h[:gifted] == "true" ? 0 : 1} 
+0

感谢,这是聪明的... – Prem

+0

你欢迎:) – aherve

1

根据您的实现,你也可以组这些项目

arr.group_by{|h| h[:gifted]} 
#=>=> {"true"=>[{:tap=>"bucket", :mobile=>"charger", :apple=>"knife", :gifted=>"true"}, {:tap=>"bucket", :mobile=>"charger", :apple=>"knife", :gifted=>"true"}], nil=>[{:tap=>"bucket", :mobile=>"charger", :apple=>"knife"}, {:tap=>"bucket", :mobile=>"charger", :apple=>"knife"}]} 

所以要得到真正的对象

arr.group_by{|h| h[:gifted]}["true"] 
#=>[{:tap=>"bucket", :mobile=>"charger", :apple=>"knife", :gifted=>"true"}, {:tap=>"bucket", :mobile=>"charger", :apple=>"knife", :gifted=>"true"}]