Rubyで配列の要素をソートする方法:sort, sort!

今回はRubyで配列の要素をソートする方法について解説します。

sort

Rubyで配列の要素をソートする際はsortメソッドを使います。

sortメソッドでは、要素をソートした配列を新しい配列として返します。

要素の比較には「<=>」の演算子が使われています。
※比較する要素の中に「<=>」演算子で比較できない要素や、実装されていないオブジェクトがあるとエラーが出ます

基本的な書式は以下のようになります。

array.sort

array.sort{|x, y| block}

書式の下段にあるように、ブロックを指定すると、そのブロックの戻り値によってソートされます。

実際にsortメソッドを使ってみましょう。

array = [7,5,3,8,1,3,2,9]

p array.sort
p array.sort{|a,b|b<=>a}

newa = array.sort
p newa

実行結果は以下のようになります。

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

array.sortを新しい配列として作成することもできます。

また、文字列でソートすることもできます。

array = ["milkman","Milk","Milkman","milk","MILK"]

p array.sort

結果は以下のようになります。

["MILK", "Milk", "Milkman", "milk", "milkman"]

sort!

sort!メソッドでは、レシーバ自身をソートした配列として返します。

書式はsortメソッドと変わりません。

sortメソッドと比較してみましょう。

array1 = ["milkman","Milk","Milkman","milk","MILK"]
array2 = ["milkman","Milk","Milkman","milk","MILK"]

array1.sort
p array1

array2.sort!
p array2

実行結果は以下のようになります。

["milkman", "Milk", "Milkman", "milk", "MILK"]
["MILK", "Milk", "Milkman", "milk", "milkman"]

このように、sort!メソッドではレシーバ自身がソートされます。



購読

平日・毎朝更新中