Rubyのsortメモ
Rubyのsortに関するメモです。
sortメソッド
配列をソートするには、sort(もしくはsort!)メソッドを使います。後ろにブロック処理を記述することで、比較方法を定義する事が出来ます。ここでは昇順でソートする方法と降順でソートする方法を記載します。
p [5,3,7,4,9,0,1,8,2,6].sort #=>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] p [5,3,7,4,9,0,1,8,2,6].sort{|a, b| a <=> b } #=>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] p [5,3,7,4,9,0,1,8,2,6].sort.reverse #=>[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] p [5,3,7,4,9,0,1,8,2,6].sort{|a, b| b <=> a } #=>[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
因みに、ブロックの中で出てきた<=>
は比較演算子と呼ばれるもので、左右の項の大小関係により、0,1,-1が返却されます。
p 1 <=> 1 #=> 0 p 1 <=> 0 #=> 1 p 0 <=> 1 #=> -1 p 2 <=> 0 #=> 1 p 0 <=> 2 #=> -1
sort_byメソッド
ブロック処理の戻り値を元にソートすることを前提としたのがsort_byメソッドです。以下の例のように、アルファベット順でなく、文字数でソートしたい時などに使えます。
langs = ["Java", "C", "Python", "C++", "Ruby", "Basic"] p langs.sort_by{|s| s } #=>["Basic", "C", "C++", "Java", "Python", "Ruby"] p langs.sort_by{|s| s.size } #=>["C", "C++", "Java", "Ruby", "Basic", "Python"]