Ruby 配列のソート

配列のソート

配列を何かの条件でソートするにはsort_byメソッドを使う。sort_byメソッドはブロックを使って要素をソートした配列を返す。

list = ["David", "Alice", "Bob",  "Carols"]
p list.sort_by { |name| name.size }
["Bob", "David", "Alice", "Carols"]

今回は名前の文字数が少ない順にソートした。

配列の中の配列のソート

名前、性別、年齢の情報が入った配列を年齢の順にソートしたい。

list = [["alice", "f", "15"], ["david", "m", "17"], ["jasmin", "f", "17"], ["john", "m", "18"], ["paul", "m", "20"]]

list.sort_by! { |person| person[2].to_i }
list.each { |person| puts person.join("\t") }

今回もsort_byメソッドを使う。ブロック内変数のpersonにはlistの要素、つまり各個人の情報が入った配列が代入される。 joinメソッドは配列の各要素を、引数を区切り文字として結合した文字列を返す。eachメソッドのブロック内のpersonもlistの要素が入るが、年齢順にソートされているので下のようになる。ブロック内の変数は内部で完結していて外から参照できないことに注意。

alice    f   15
david   m   17
jasmin  f   17
john    m   18
paul    m   20