比較して並び換えをする演算子を使って、 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"]
予想通り、アルファベット順に並べかえることができた。