sort -> Array[permalink][rdoc][edit]sort! -> selfsort {|a, b| ... } -> Arraysort! {|a, b| ... } -> self-
全ての要素を昇順にソートします。要素同士の比較は <=> 演算子を使って行います。
sort は self を変更せず、ソートされた配列を生成して返します。 sort! は self を破壊的にソートし、self を返します。
ブロックとともに呼び出された時には、要素同士の比較をブロックを用いて行います。ブロックに2つの要素を引数として与えて評価し、その結果で比較します。ブロックは <=> 演算子と同様に整数を返すことが期待されています。つまり、ブロックは第1引数が大きいなら正の整数、両者が等しいなら0、そして第1引数の方が小さいなら負の整数を返さなければいけません。両者を比較できない時は nil を返します。
Array#sort, Array#sort! は安定ではありません (unstable sort)。安定なソートが必要な場合は Enumerable#sort_by を使って工夫する必要があります。詳しくは Enumerable#sort_by の項目を参照してください。
※ 比較結果が同じ要素は元の順序通りに並ぶソートを「安定なソート (stable sort)」と言います。
例ary1 = [ "d", "a", "e", "c", "b" ] p ary1.sort #=> ["a", "b", "c", "d", "e"] ary2 = ["9", "7", "10", "11", "8"] p ary2.sort #=> ["10", "11", "7", "8", "9"] (文字列としてソートするとこうなる) p ary2.sort{|a, b| a.to_i <=> b.to_i } #=> ["7", "8", "9", "10", "11"] (ブロックを使って数字としてソート) # sort_by を使っても良い p ary2.sort_by{|x| x.to_i } #=> ["7", "8", "9", "10", "11"][SEE_ALSO] Enumerable#sort_by , Array#sort_by!