Ruby Tips!

RubyのTipsを紹介します

配列をソートする

配列をソートするには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より高速である。