|
sortは引数として与えたリスト(配列)の並べ替えを行う関数です。
与えたリスト(配列)の内容は変化しませんので注意して下さい。
|
|
@new = sort @data;
@dataの要素内容を文字コード順(昇順)にソートして@newに代入。
|
|
@new = reverse(sort @data);
@dataの要素内容を文字コード順(昇順)にソートしたものを逆(降順)にして@newに代入。
|
|
|
これらの方法だと以下のような桁の違う数値が入った配列の場合に期待した並べ替えになりません。
|
|
@data = (25, 3, 10);
@new = sort @data;
print "@new";
|
|
|
文字コード順のソートとなる為「10 25 3」と表示されます。
これを解消する為に以下の「BLOCK LIST形式」でソートを行います。
|
|
@new = sort{$a <=> $b} @data;
数値の小さい順(昇順)にソート。
|
|
@new = sort{$b <=> $a} @data;
数値の大きい順(降順)にソート。
|
|
|
BLOCK部にあたる{ }内にソートの条件を指定します。
$aと$bは特殊変数でソートの昇順・降順を指定します。
「<=>」は数値としてコンペアし、ソートを行うという指定です。
|
|
@new = sort keys %data;
%dataのキーを文字コードの昇順にソートして@newに代入。
|
|
@new = reverse(sort keys %data);
%dataのキーを文字コードの昇順にソートしたものを逆(降順)にして@newに代入。
|
|
|
「keys %data」とすると%dataの全てのキーのリストを返します。
値をソートする場合は以下のように「BLOCK LIST形式」で行います。
ソートされた値に対応するキーのリストが返されます。
|
|
@new = sort{$data{$a} <=> $data{$b}} keys %data;
%dataの値(数値)の昇順にソートされたキーのリストを@newに代入。
|
|
@new = sort{$data{$b} <=> $data{$a}} keys %data;
%dataの値(数値)の降順にソートされたキーのリストを@newに代入。
|
|
|
値を文字列としてソートする場合は「<=>」ではなく「cmp」を使用します。
|
|
□更新履歴
2007.04.23 全体的に内容を見直し
|
|
|