sort関数を使う

Perl/CGIプログラミング でのsort関数の使い方について説明します。

sort(ソート)とは、データを一定の基準に従い並べることです。

なのでもちろん、sort関数は 配列 などのリスト形式になっているデータを、アルファベット順や数字を昇順または降順に並べることができます。

以前「 Perl/CGIのループプログラミング 」で少しでてきましたが、今回はsort関数についてもっと詳しくその使い方を解説していきます。

  1. 英字ソート
  2. 数値ソート

英字ソート

Perl/CGIプログラム のsort関数を使って、ABC~といったアルファベットをソートしていきます。

アルファベット順でソート

まずは、ABCというようなアルファベット順でソートしていきましょう。

#!/usr/bin/perl

use strict;

my @alphabet = ('C', 'B', 'D', 'A');
@alphabet = sort @alphabet;

print "Content-type: text/html\n\n";
print @alphabet;
exit;

このPerl/CGIプログラムを実行すると、「ABCD」と表示されます。

または、以下のように書いても同じことができます。

#!/usr/bin/perl

use strict;

my @alphabet = ('C', 'B', 'D', 'A');
@alphabet = sort {$a cmp $b} @alphabet;

print "Content-type: text/html\n\n";
print @alphabet;
exit;

このPerl/CGIプログラムを実行すると、同じように「ABCD」と表示されます。

アルファベットの逆ソート

今度は、ZYX~のようにアルファベットを逆に並べてみましょう。

#!/usr/bin/perl

use strict;

my @alphabet = ('C', 'B', 'D', 'A');
@alphabet = sort {$b cmp $a} @alphabet;

print "Content-type: text/html\n\n";
print @alphabet;
exit;

このPerl/CGIプログラムを実行すると、「DCBA」と表示されます。

みごとに逆になりましたね。

さらに、以下のように書いても同じことができます。

#!/usr/bin/perl

use strict;

my @alphabet = ('C', 'B', 'D', 'A');
@alphabet = reverse sort @alphabet;

print "Content-type: text/html\n\n";
print @alphabet;
exit;

このPerl/CGIプログラムを実行すると、同じように「DCBA」と表示されます。

アルファベットのソートについては以上です。

数値ソート

Perl/CGIプログラムのsort関数を使って、0123~のように数字をソートしていきます。

今までのようにsort関数をはさめばいけそうな気がしますが、それだと0~9までしか通用しません。

例えば以下を見てください。

#!/usr/bin/perl

use strict;

my @number = (10, 0, 15, 5);
@number = sort @number;

print "Content-type: text/html\n\n";
print "@number";
exit;

このPerl/CGIプログラムを実行すると、「0 10 15 5」と表示されます。

10や15は頭の1しか評価されていないためこのような結果になってしまいます。

それではこまるので、一工夫して数値をソートしていきます。

数値を昇順にソート

まずは、数値を昇順に並べてみます。

昇順とは、0123のように小さいものから順にということです。

#!/usr/bin/perl

use strict;

my @number = (10, 0, 15, 5);
@number = sort {$a <=> $b} @number;

print "Content-type: text/html\n\n";
print "@number";
exit;

このPerl/CGIプログラムを実行すると、「0 5 10 15」と表示されます。

数値を降順にソート

次は、数値を降順に並べてみましょう。

降順とは、数字の値が大きいものから小さいものへ並べることです。

#!/usr/bin/perl

use strict;

my @number = (10, 0, 15, 5);
@number = sort {$b <=> $a} @number;

print "Content-type: text/html\n\n";
print "@number";
exit;

このPerl/CGIプログラムを実行すると、「15 10 5 0」と表示されます。

みごとに逆になりましたね。

これで数値のソートについては以上です。

<戻る>