- Home ›
- Ruby入門 ›
- 配列(Array)クラス
配列内の要素をソートする(sort)
Array クラスの sort メソッドを使用すると、配列に格納されている各要素を一定の規則でソートすることができます。ここでは Ruby で配列内の要素をソートする方法について解説します。
(Last modified: )
配列内の要素をソートする
Array
クラスで用意されている sort
メソッドを使用すると、配列に格納されている各要素を一定の規則でソートすることができます。
Arrayオブジェクト.sort
sort
メソッドは配列に格納されている要素を一定の規則でソートした新しい配列を返します。
ソートは比較方式を指定しない場合には各要素を <=>
メソッドで要素と要素を比較します。この場合、要素は小さい順番に並べ替えられます。
具体的には次のように記述します。
ary = [4, 2, 5, 1, 3] newary = ary.sort
この場合次のような新しい配列を取得します。
[1, 2, 3, 4, 5]
また sort
メソッドには sort!
メソッドも用意されています。
Arrayオブジェクト.sort!
sort!
メソッドの場合には新しい配列を返すのではなく、対象の配列自身をソートした配列に変更します。
ソートの方法を指定する
デフォルトでは各要素を <=>
メソッドを使って比較していますが、 sort
メソッドのあとにブロックを記述してソートの方法を指定することができます。
Arrayオブジェクト.sort {|a, b| ... }
ブロック内で比較する 2 つの要素をそれぞれ「a」と「b」を使ってどのように比較するかを記述します。デフォルトと同じ比較方式にするには次のように記述します。
ary = [4, 2, 5, 1, 3] newary = ary.sort {|a, b| a <=> b }
self <=> other
メソッドの場合は「self」と「other」を比較して、「self」が大きい時に正、等しい時に 0 、小さい時に負の整数を返します。そこで降順に並べるように記述してみます。
ary = [4, 2, 5, 1, 3] newary = ary.sort {|a, b| (-1) * (a <=> b) }
※正直このように書くのがいいのか分からないのですが一応サンプルとして書いておきます。
この場合は各要素を比較して降順に並べ替えられた新しい配列を取得できます。
またブロックを記述する場合にも sort!
メソッドも用意されています。
Arrayオブジェクト.sort! {|a, b| ... }
sort!
メソッドの場合には新しい配列を返すのではなく、対象の配列自身をブロック内で指定した比較方法でソートした配列に変更します。
実際に試してみます。
# encoding: UTF-8 ary = [3, 4, 2, 5, 1] p ary newary = ary.sort p newary ary = %w[Kudou Yamada Andou Yoshida] p ary newary = ary.sort{|a,b| (-1)*(a <=> b)} p newary
実行結果は次のようになります。
-- --
Ruby で配列内の要素をソートする方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。