関数:配列の中身をソートしたい
sort関数を使って、配列の要素を整列することができます。
sort { 比較条件 } (配列変数)
sort関数には、{}で括った部分に比較の条件を記載します。
配列の要素を数値として比較する場合には$a <=> $b、文字列として比較する場合には、$a cmp $bのように記述します。
sort関数の戻り値は、整列条件で指定された方法で整列した配列が返されます。
文字列として比較した場合の例をプログラム 例1、数値として比較した場合の例をプログラム 例2に示します。
プログラム 例1
#!/usr/bin/perl
my %unsorted;
print "【AFCアジアチャンピオンズリーグ ケディリ vs 浦和】" , "\n";
print "本日の試合の浦和レッズスターティングメンバー" , "\n";
$unsorted[0] = "ゴールキーパー 23 都築 龍太";
$unsorted[1] = "ディフェンダー 2 坪井 慶介 ";
$unsorted[2] = "ディフェンダー 5 ネネ";
$unsorted[3] = "ディフェンダー 20 堀之内 聖";
$unsorted[4] = "ミッドフィルダー 14 平川 忠亮";
$unsorted[5] = "ミッドフィルダー 13 鈴木 啓太 ";
$unsorted[6] = "ミッドフィルダー 8 小野 伸二";
$unsorted[7] = "ミッドフィルダー 22 阿部 勇樹";
$unsorted[8] = "ミッドフィルダー 16 相馬 崇人";
$unsorted[9] = "ミッドフィルダー 9 ポンテ";
$unsorted[10] = "フォワード 10 永井 雄一郎";
$unsorted[11] = "監督 ホルガー・オジェック";
print "整列前の配列の中身:" , "\n";
print join ("\n" , @unsorted) , "\n\n";
@sorted = sort {$a cmp $b} @unsorted;
print "整列後の配列の中身:" , "\n";
print join ("\n" , @sorted) , "\n";
例1の実行結果
[it-engineer@home1 perl]# perl 20070520-21.pl
【AFCアジアチャンピオンズリーグ ケディリ vs 浦和】
本日の試合の浦和レッズスターティングメンバー
整列前の配列の中身:
ゴールキーパー 23 都築 龍太
ディフェンダー 2 坪井 慶介
ディフェンダー 5 ネネ
ディフェンダー 20 堀之内 聖
ミッドフィルダー 14 平川 忠亮
ミッドフィルダー 13 鈴木 啓太
ミッドフィルダー 8 小野 伸二
ミッドフィルダー 22 阿部 勇樹
ミッドフィルダー 16 相馬 崇人
ミッドフィルダー 9 ポンテ
フォワード 10 永井 雄一郎
監督 ホルガー・オジェック
整列後の配列の中身:
ゴールキーパー 23 都築 龍太
ディフェンダー 2 坪井 慶介
ディフェンダー 20 堀之内 聖
ディフェンダー 5 ネネ
フォワード 10 永井 雄一郎
ミッドフィルダー 13 鈴木 啓太
ミッドフィルダー 14 平川 忠亮
ミッドフィルダー 16 相馬 崇人
ミッドフィルダー 22 阿部 勇樹
ミッドフィルダー 8 小野 伸二
ミッドフィルダー 9 ポンテ
監督 ホルガー・オジェック
[it-engineer@home1 perl]#
プログラム 例2
#!/usr/bin/perl
my %unsorted , @sorted , @index;
print "【日本の各地域の都市数】" , "\n\n";
$unsorted[0] = "34"; #全国
$unsorted[1] = "63"; #北海道
$unsorted[2] = "61"; #東北
$unsorted[3] = "170"; #北信越
$unsorted[4] = "79"; #関東
$unsorted[5] = "90"; #東海
$unsorted[6] = "49"; #近畿
$unsorted[7] = "30"; #中国
$unsorted[8] = "94"; #九州
print "整列前の配列の中身:" , "\n";
@index = ("全国" , "北海道" , "東北" , "北信越" , "関東" , "東海" , "近畿" , "中国" , "九
州");
print join("\t" , @index) , "\n";
print join ("\t" , @unsorted) , "\n\n";
@sorted = sort {$a <=> $b} @unsorted;
print "整列後の配列の中身(都市数を昇順で整列しています。):" , "\n";
print join ("\t" , @sorted) , "\n";
例2の実行結果
[it-engineer@home1 perl]# perl 20070520-22.pl
【日本の各地域の都市数】
整列前の配列の中身:
全国 北海道 東北 北信越 関東 東海 近畿 中国 九州
34 63 61 170 79 90 49 30 94
整列後の配列の中身(都市数を昇順で整列しています。):
30 34 49 61 63 79 90 94 170
[it-engineer@home1 perl]#

