実行環境:
ruby 1.9.3
rubyでハッシュの配列を複数のキーでソートする場合のやり方です。ruby 1.9.3
多次元配列やオブジェクトの配列も同じ考え方でいけます。
たとえば、以下のようなハッシュの配列があったとします。
arr = [ { :name => "Dave", :age => 7, :birthday => '12/05' }, { :name => "Carol", :age => 5, :birthday => '08/23' }, { :name => "Alice", :age => 6, :birthday => '05/18' }, { :name => "Bob", :age => 5, :birthday => '01/31' } ]
これを :age と :birthday の2つの値でソートすることを考えます。
あくまでも例なので :birthday に年まで入れろや、という突っ込みはなしで(^^;
まずは基本。:ageの値をキーとしてソートするなら
arr.sort!{ |a, b| a[:age] <=> b[:age] }こんな感じですよね。
次に :age と :birthday の2つの値をキーでソートします。
言いかえれば、まず :age の値で比べて :age が同じなら :birthday の順で並び変える、ということです。
arr.sort!{ |a, b| (a[:age] == b[:age]) ? a[:birthday] <=> b[:birthday] : a[:age] <=> b[:age] }こんな感じでしょうか。
:age の値の比較を2回やっているのがちょっとカッコ悪いですかね。
newsh = arr.sort{ |a, b| ( (a[:age] <=> b[:age]).nonzero? || (a[:birthday] <=> b[:bir thday])) }
返信削除ではどうでしょうか