ごくごく基本的なことなんだけれど一応。
例えば、以下のような集計結果処理する場合、単純にキーを基準にソートすると「 2:00~3:00 => 5件」より前に「10:00~11:00 => 13件」がくるので適切な結果表示が得られなくなります。そのため、キーか値を大小比較してソートするように設定してやる必要があります。
#!/usr/bin/perl -w print "Content-type: text/html\n\n"; use strict; use warnings; my $BR = '<br />'; my %count = ( '1:00~2:00' => '3件', '2:00~3:00' => '5件', '3:00~4:00' => '8件', '4:00~5:00' => '6件', '5:00~6:00' => '5件', '6:00~7:00' => '9件', '7:00~8:00' => '10件', '8:00~9:00' => '15件', '9:00~10:00' => '16件', '10:00~11:00' => '13件', '11:00~12:00' => '11件', ); print "ハッシュを単純なソートでループ処理$BR"; foreach my $hour (sort(keys %count)) { print "$hour => $count{$hour}$BR"; } print $BR; print "ハッシュの「キー」で、大小比較ソートしてループ処理$BR"; foreach my $hour (sort {$a <=> $b}(keys %count)) { print "$hour => $count{$hour}$BR"; } print "$BR"; print "ハッシュの「値」で、大小比較ソートしてループ処理$BR"; foreach my $hour (sort {$count{$a} <=> $count{$b}}(keys %count)) { print "$hour => $count{$hour}$BR"; } print "$BR";
最後の例のように、値でソートしてやれば、件数の多いものから順にソートされることになります。キーでのソートにおいても、値でのソートにおいても、ソート順を逆にしたい時は「$a」と「$b」を逆にしてやればよいということ。「$a」と「$b」は決まり文句。
Comments