配列をソートする
配列をソートするにはArray#sort
を使う。ソートは要素を演算子<=>
で比較することで行われる。ソート順は昇順である。また破壊的メソッドArray#sort!
もある。
p [5, 2, 1, 4, 3].sort #=> [1, 2, 3, 4, 5] a = [5, 2, 1, 4, 3] a.sort! p a #=> [1, 2, 3, 4, 5]
これらのメソッドはブロックを与えるとソートの順番をカスタマイズすることができる。ブロックは2つの要素の大小関係を比較して、正か負の整数を返すようにする。例えば配列を降順にソートするには以下のようにする。
p [5, 2, 1, 4, 3].sort{|a, b| b <=> a } #=> [5, 4, 3, 2, 1]
配列のソートにはEnumerable#sort_by
を使う方法もある。このメソッドは、ブロックの評価結果を演算子<=>
で比較して、配列を昇順にソートする。以下は文字列の配列を、文字列を数値にして、ソートする例である。
p ["2", "4", "5", "1", "3"].sort_by{|a| a.to_i} #=> ["1", "2", "3", "4", "5"]
sort
では2つの要素を比較する度にブロックが実行されるが、sort_by
ではブロックは各要素に1度だけしか実行されない。ブロックの処理に時間がかかる場合、sort_by
の方がsort
より高速である。