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}]

私はルビーの並べ替えとドキュメントによる並べ替えを見て、Soで関連する質問を見つけましたが、レールから始めたばかりなので理解できませんでした。

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 に答える