基礎プログラミング II 第 7 回 (専門演習紹介) 「細かく指定して並べ替えするには」 講義ノート目次

比較して並び換えをする演算子を使って、 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"]

予想通り、アルファベット順に並べかえることができた。