2列ソートをやろうとしたんだけど、ここらへんのことをすっかり覚えてなかったので復習。
a <=> b
はa > b
なら1
を、a < b
なら-1
を返す。一致すれば0
。b
に対してa
が大きいかどうかを返してて、a
が主人公っぽいイメージ(レシーバだから当然か)。
p 1 <=> 2 #=> -1 p 2 <=> 1 #=> 1 p 1 <=> 1 #=> 0
これをsort
と組み合わせると次のようになる。
array = %w[1 2 3 4 5] p array.sort { |a,b| a.to_i <=> b.to_i } #=> ["1", "2", "3", "4", "5"] p array.sort { |a,b| b.to_i <=> a.to_i } #=> ["5", "4", "3", "2", "1"]
(a,b
と<=>
の結果とをつなぐ適当な日本語が思いつかないのであとで書く)