2

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

   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 开始。

4

2 回答 2

5

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

array.sort_by do |hash|
  pre_sorted[ hash[:attr_name] ]
end
于 2013-01-29T14:49:42.567 回答
1

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]]}
于 2013-01-29T14:49:22.317 回答