如果我有预先确定的顺序,我如何对哈希数组进行排序我有一个需要像这样排序的数组:
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。
答案 0 :(得分:5)
要按给定条件对数组进行排序,可以使用sort_by
。在您的情况下,您希望按pre_sorted
哈希中的条目排序,因此:
array.sort_by do |hash|
pre_sorted[ hash[:attr_name] ]
end
答案 1 :(得分: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]]}