Ruby でテーブルっぽいデータを任意の項目でソートしたいときの Tips 。こんなやり方できんのね。
a = [ {:id => 4, :name => "abcde", :value => 50, :tag => "zzz"}, {:id => 3, :name => "abcde", :value => 50, :tag => "zzz"}, {:id => 3, :name => "abcde", :value => 30, :tag => "zzz"}, {:id => 2, :name => "abcde", :value => 50, :tag => "zzz"}, {:id => 2, :name => "bbcde", :value => 50, :tag => "zzz"}, {:id => 1, :name => "abcde", :value => 50, :tag => "zzz"}, {:id => 1, :name => "abcde", :value => 50, :tag => "azz"}, {:id => 0, :name => "abcde", :value => 50, :tag => "zzz"} ] a.sort_by {|e| [e[:id], e[:name], e[:value], e[:tag]] } # => [{:tag=>"zzz", :name=>"abcde", :value=>50, :id=>0}, {:tag=>"azz", :name=>"abcde", :value=>50, :id=>1}, {:tag=>"zzz", :name=>"abcde", :value=>50, :id=>1}, {:tag=>"zzz", :name=>"abcde", :value=>50, :id=>2}, {:tag=>"zzz", :name=>"bbcde", :value=>50, :id=>2}, {:tag=>"zzz", :name=>"abcde", :value=>30, :id=>3}, {:tag=>"zzz", :name=>"abcde", :value=>50, :id=>3}, {:tag=>"zzz", :name=>"abcde", :value=>50, :id=>4}]
一応補足しておくと左にある項目から優先してソートされる。処理の順考えれば当然そうなるのは分かるけど、うまいなぁ。