繁体   English   中英

在ruby中排序哈希数组

[英]Sorting array of hashes in ruby

如果我有预定的顺序,如何排序哈希数组?我有一个数组需要像这样排序:

   array =  [{:attr_name=>:phone, :attr_value=>30}, {:attr_name=>:name, :attr_value=>20}, {:attr_name=>:similarity, :attr_value=>0}, {:attr_name=>:weight, :attr_value=>50}]

而且我有一个哈希值,希望基于该哈希值进行排序:

pre_sorted = {
            :name => 0,
            :phone => 1,
            :weight=> 2,
            :similarity => 3
        }

排序后,我的数组应该看起来像这样:

[{:attr_name=>:name, :attr_value=>20}, {:attr_name=>:phone, :attr_value=>30}, {:attr_name=>:weight, :attr_value=>50}, {:attr_name=>"similarity", :attr_value=>0}]

我查看了按文档排序的ruby,并在So上找到了相关问题,但由于我只是从Rails入手而无法解决。

要按给定条件对数组排序,可以使用sort_by 在您的情况下,您要按pre_sorted哈希中的条目进行排序,因此:

array.sort_by do |hash|
  pre_sorted[ hash[:attr_name] ]
end

Array#sort接受用于比较的代码块: http : //www.ruby-doc.org/core-1.9.3/Array.html#method-i-sort

array.sort{|a,b| pre_sorted[a[:attr_value]] <=> pre_sorted[b[:attr_value]]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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