■ Ruby の便利なところ: 手軽にできる sort

スクリプト言語で、ソートが手軽にできるのはとてもありがたいです。 「出現回数順」や「アルファベット順」などにソートして出力したいのは普通のことです。 こういうとき Ruby は、処理した結果をソートして出力することが手軽にできます。

● 配列のソート

配列は「Array クラス」です。 もともと sort メソッドを持っています。 そのため、手軽にソートできてしまいます。

$ irb
irb(main):001:0> array = [5, 3, 6, 1, 8, 2, 9, 10, 4, 7]
[5, 3, 6, 1, 8, 2, 9, 10, 4, 7]
irb(main):002:0> p array.sort
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
nil
irb(main):003:0> 

● 配列の配列のソート

ここでは、配列に必要な情報をまとめて入れて、その情報を配列に入れています。 そして配列の中の配列の値でソートを行っています。

$ irb
irb(main):001:0> a = []
[]
irb(main):002:0> a[0] = [2, 1]
[2, 1]
irb(main):003:0> a[1] = [3, 4]
[3, 4]
irb(main):004:0> a[2] = [0, 9]
[0, 9]
irb(main):005:0> p a.sort
[[0, 9], [2, 1], [3, 4]]
nil
irb(main):006:0> p a.sort {|x, y| y[1] <=> x[1]}
[[0, 9], [3, 4], [2, 1]]
nil
irb(main):007:0> p a
[[2, 1], [3, 4], [0, 9]]
nil
irb(main):008:0> 

● ハッシュのソート

サンプルとしては次のものがあります。

● 日付順

サンプルとして次のものがあります。

#! /usr/local/bin/ruby
# /home/tetsu/src/ruby/intro/w/sort1.rb
# Created: October 28,2001 Sunday 03:26:45

files = Dir.entries('.').collect do |f|
  [f, File.stat(f).mtime]
end

files.sort {|a, b|
  [b[1], a[0]] <=> [a[1], b[0]]
}.each do |arr|
  p arr
end
ここでは、カレントディレクトリにあるファイルを扱っています。 配列に必要な「ファイル名と日付」をまとめて入れて、その情報を配列に入れています(配列の配列をつくっています)。 そして配列の中の配列の値(日付)でソートを行っています。 ソートのキーとしては、日付とファイル名の二つを使っています。 日付は新しいもの順(降順)にしています。 このため、b[1]a[1] の順にしています。 ファイル名はアルファベット順(昇順)にしています。 このため、a[0]b[0] の順にしています。


渡辺哲也(WATANABE Tetsuya): Tetsuya.WATANABE atmark nifty.com