複合キーで昇順降順ソートできるsort_byて良い

1.7系から?かな使えるようになったのは。

[[5,2],[1,2],[9,8],[5,9],[3,5],[3,4],[5,3]]

こんな配列があって、0番目を降順、1番目を昇順でソートしたいって時が多々ある。SQLだと簡単なんだが・・・。と言いつつもrubyでも簡単にできるこの素晴らしさ。

irb(main):001:0> arr = [[5,2],[1,2],[9,8],[5,9],[3,5],[3,4],[5,3]]
irb(main):002:0> arr.sort_by{|a| [-a[0], a[1]]}
=> [[9, 8], [5, 2], [5, 3], [5, 9], [3, 4], [3, 5], [1, 2]]

仮にa[1]の値がTimeであれば、単純に.to_iしてやればそれで済む。これなら、ORDER BY a desc, bの感覚で使えるな。