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}]
一応補足しておくと左にある項目から優先してソートされる。処理の順考えれば当然そうなるのは分かるけど、うまいなぁ。