各値がハッシュの配列をハッシュのある値でソート

2006年4月12日水曜日
TableViewに値を埋め込む場合、列名をキーにしたハッシュを配列にすると簡単にできるのでそうしているのですが、
ここで引っかかったのが、ある列の値でソートをすること。

@files = [{date => "2006/04/12", title => "A"}, {date => "2005/12/10", title => "B"}, {date => "2006/03/01" title => "C"}]

という配列があった場合、日付(date)でソートして、

[{date => "2005/12/10", title => "B"}, {date => "2006/03/01" title => "C"},{date => "2006/04/12" title => "A"}]

にするには?ということです。

結局解決方法は簡単でした。

@files.sort{|a, b|
 a['date'] <=> b['date']
}

昇順の場合。降順は、b['date'] <=> a['date']

a, b に配列のインデックスが入るのかと勘違いしていろいろ試した私は、最終的にむりやりaの値をprintさせてみたら、「なんだ、配列の値(ハッシュそのもの)が入ってるじゃん」(よく考えたら当たり前)と、なんか頭に電灯が点った気分。検索してもPerlのやり方(しかも結構複雑だったり)しか出てこないし、案外質問してる人もいるので、メモとして書いておきます。



2 コメント:

  • そういう場合はsort_byがおすすめです。
    $ ruby -Ks -rpp -e 'pp [{:date => "2006/04/12", :title => "A"}, {:date => "2005/12/10", :title => "B"}, {:date => "2006/03/01", :title => "C"}].sort_by{|x|x[:date]}'
    [{:title=>"B", :date=>"2005/12/10"},
    {:title=>"C", :date=>"2006/03/01"},
    {:title=>"A", :date=>"2006/04/12"}]

  • ありがとうございます!
    なるほどーsort_byですか。それでやってみます。
    再度rubyリファレンスを確認したところ、Arrayのとこばっかり見てたから、sort_byメソッドに気付かなかったことを知りました。
    おーこんなところに。「おすすめ」の意味もわかりました。
    改めてお礼を申し上げます。

  • コメントを投稿