或るプログラマの開発日記

日々の勉強したことの備忘録なんかに使っていきます

Rubyのsortメモ

Rubyのsortに関するメモです。

sortメソッド

配列をソートするには、sort(もしくはsort!)メソッドを使います。後ろにブロック処理を記述することで、比較方法を定義する事が出来ます。ここでは昇順でソートする方法と降順でソートする方法を記載します。

p [5,3,7,4,9,0,1,8,2,6].sort
#=>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

p [5,3,7,4,9,0,1,8,2,6].sort{|a, b| a <=> b }
#=>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  
p [5,3,7,4,9,0,1,8,2,6].sort.reverse
#=>[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

p [5,3,7,4,9,0,1,8,2,6].sort{|a, b| b <=> a }
#=>[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

因みに、ブロックの中で出てきた<=>は比較演算子と呼ばれるもので、左右の項の大小関係により、0,1,-1が返却されます。

p 1 <=> 1 #=> 0
p 1 <=> 0 #=> 1
p 0 <=> 1 #=> -1
p 2 <=> 0 #=> 1
p 0 <=> 2 #=> -1

sort_byメソッド

ブロック処理の戻り値を元にソートすることを前提としたのがsort_byメソッドです。以下の例のように、アルファベット順でなく、文字数でソートしたい時などに使えます。

langs = ["Java", "C", "Python", "C++", "Ruby", "Basic"]
p langs.sort_by{|s| s }
#=>["Basic", "C", "C++", "Java", "Python", "Ruby"]

p langs.sort_by{|s| s.size }
#=>["C", "C++", "Java", "Ruby", "Basic", "Python"]