CGI WEB [ CGI配布 CGI解説 ホームページ作成支援 ]
ホーム|CGI配布|CGIランキング|CGIサポート|CGI解説|ワンタッチボード|ワンタッチメール|クイズ|自宅サーバ|サーバガイド|登録太郎|CGI WEBサーチ|CGI WEB窓口


back
ソート





sortは引数として与えたリスト(配列)の並べ替えを行う関数です。 与えたリスト(配列)の内容は変化しませんので注意して下さい。

■配列のソート1

@new = sort @data;

@dataの要素内容を文字コード順(昇順)にソートして@newに代入。

■配列のソート2

@new = reverse(sort @data);

@dataの要素内容を文字コード順(昇順)にソートしたものを逆(降順)にして@newに代入。

これらの方法だと以下のような桁の違う数値が入った配列の場合に期待した並べ替えになりません。

@data = (25, 3, 10);
@new = sort @data;
print "@new";

文字コード順のソートとなる為「10 25 3」と表示されます。 これを解消する為に以下の「BLOCK LIST形式」でソートを行います。

■BLOCK LIST形式1

@new = sort{$a <=> $b} @data;

数値の小さい順(昇順)にソート。

■BLOCK LIST形式2

@new = sort{$b <=> $a} @data;

数値の大きい順(降順)にソート。

BLOCK部にあたる{ }内にソートの条件を指定します。 $aと$bは特殊変数でソートの昇順・降順を指定します。 「<=>」は数値としてコンペアし、ソートを行うという指定です。

■ハッシュのソート1

@new = sort keys %data;

%dataのキーを文字コードの昇順にソートして@newに代入。

■ハッシュのソート2

@new = reverse(sort keys %data);

%dataのキーを文字コードの昇順にソートしたものを逆(降順)にして@newに代入。

「keys %data」とすると%dataの全てのキーのリストを返します。 値をソートする場合は以下のように「BLOCK LIST形式」で行います。 ソートされた値に対応するキーのリストが返されます。

■BLOCK LIST形式1

@new = sort{$data{$a} <=> $data{$b}} keys %data;

%dataの値(数値)の昇順にソートされたキーのリストを@newに代入。

■BLOCK LIST形式2

@new = sort{$data{$b} <=> $data{$a}} keys %data;

%dataの値(数値)の降順にソートされたキーのリストを@newに代入。

値を文字列としてソートする場合は「<=>」ではなく「cmp」を使用します。



□更新履歴
 2007.04.23 全体的に内容を見直し




CGI WEB