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!メソッドではレシーバ自身がソートされます。