今回はRubyで配列の要素をソートする方法について解説します。
sort
Rubyで配列の要素をソートする際はsortメソッドを使います。
sortメソッドでは、要素をソートした配列を新しい配列として返します。
要素の比較には「<=>」の演算子が使われています。
※比較する要素の中に「<=>」演算子で比較できない要素や、実装されていないオブジェクトがあるとエラーが出ます
基本的な書式は以下のようになります。
1 2 3 |
array.sort array.sort{|x, y| block} |
書式の下段にあるように、ブロックを指定すると、そのブロックの戻り値によってソートされます。
実際にsortメソッドを使ってみましょう。
1 2 3 4 5 6 7 |
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 |
[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を新しい配列として作成することもできます。
また、文字列でソートすることもできます。
1 2 3 |
array = ["milkman","Milk","Milkman","milk","MILK"] p array.sort |
結果は以下のようになります。
1 |
["MILK", "Milk", "Milkman", "milk", "milkman"] |
sort!
sort!メソッドでは、レシーバ自身をソートした配列として返します。
書式はsortメソッドと変わりません。
sortメソッドと比較してみましょう。
1 2 3 4 5 6 7 8 |
array1 = ["milkman","Milk","Milkman","milk","MILK"] array2 = ["milkman","Milk","Milkman","milk","MILK"] array1.sort p array1 array2.sort! p array2 |
実行結果は以下のようになります。
1 2 |
["milkman", "Milk", "Milkman", "milk", "MILK"] ["MILK", "Milk", "Milkman", "milk", "milkman"] |
このように、sort!メソッドではレシーバ自身がソートされます。