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

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