比較して並び換えをする演算子を使って、 sort をパワフルにすることができる。
<=>
比較して並び換えをする演算子
A <=> B
A が B よりも小さかったら (A < B)
A は B よりも先に決めておかなければならない
{A => B}
全て合わせて A <=> B
これを用いて、sort{|調べたいブロックあるいは要素, 並べ換えをするために作られるブロックあるいは要素 | 並べ換えをするために作られるブロックあるいは要素 <=> 調べたいブロックあるいは要素}
とすると、並びかえができる。
> momo = [3, 4, 1, 2] > momo.sort{ * |momo,komomo| * momo <=> komomo >} [1,2,3,4]
momo.sort{
|momo,komomo|
はじめにコピーされた komomo = [3, 4, 1, 2] が用意される
momo <=>
momo と komomo を比較し komomo では順番を入れ替えていく
} 得られる changed = [1, 2, 3, 4]
である。文字列が入っていても同じである。
momo = [lolo, toto, pepe , kiki] のとき 文字コード順では "k" < "l" < "p" < "t"
作ってみよう。
momo.sort{|momo,komomo| momo <=> komomo} はじめにコピーされた komomo = ["lala", "toto", "pepe", "kiki"] が用意される。 momo とコピーされた komomo について比較し komomo では順番を入れ替えていく changed = ["kiki", "lala", "pepe", "toto"]
である。調べておこう。
> momo = ["lala", "toto", "pepe", "kiki"] => ["lala", "toto", "pepe", "kiki"] > momo.sort{|momo,komomo| momo <=> komomo} => ["kiki", "lala", "pepe", "toto"]
予想通り、アルファベット順に並べかえることができた。