%nedan = (
"bag", 15000,
"cup", 800,
"watch", 6000,
"tv", 38000,
"camera", 25000
);
print "キー(商品名)で並べ替え\n";
foreach(sort keys %nedan){
printf "%6d = %s\n",$nedan{$_},$_;
}
print "\n値(値段)で並べ替え\n";
foreach(sort {$nedan{$a} <=> $nedan{$b}} keys %nedan){
printf "%+6s = %6d\n",$_,$nedan{$_};
}
連想配列のソートです。
keys %nedan
で連想配列のキーを配列として受け取ります。
あとは
sort
関数に渡してやります。キー名のソートの場合は単純に
sort keys %nedan
でソートされたキー名を得ることができます。
値でソートする場合は
sort {$nedan{$a} <=> $nedan{$b}} keys %nedan
とします。
sort
とソートの対象配列の間に
{ }
で囲んだ大小判断の式を入れます。
$a,$b
は対象配列の要素が入るのでそれを用いて比較結果を返します。ここに
if
などを用いて条件判断のコードを書くことも可能です。