在perl中對數組或者散列進行排序的工具是sort,在這兒,一般分爲兩種,字符串和數值(阿拉伯數字)排序問題,sort默認的情況是使用Ascall碼排序。
1、sort format
>> sort USERSUB LIST
>> sort BLOCK LIST
>> sort LIST
在此,LIST其實就是一個列表,比如一個數組,或者散列使用keys進行轉換。
缺省USERSUB或BLOCK時,默認的是標準字符串比較順序排序(未定義數值排在已定義空字符串前面,而空字符串又在其他任何東西前面)。如果use locale用法起作用,那麼sort LIST根據當前的區域集的數值對lIST進行排序。
2、一般情況下,字符之間的比較用cmp,數值比較用 <=>.
3、爲了提高效率,通常情況下是不用子過程的。
4、$a and $b 是sort編譯所在的包的全局變量,是真實值的別名,所以一般情況下不要修改它們。
5、Example:
#!/usr/bin/perl
use strict;
use warnings;
my %ha;
$ha{1} = 7;
$ha{2} = 11;
$ha{3} = 13;
$ha{4} = 12;
$ha{5} = 23;
$ha{6} = 2;
$ha{11} = 32;
$ha{10} = 9;
my @k = keys %ha;
my @v = values %ha;
sub bykey { $a <=> $b }
sub byvalue { $ha{$a} <=> $ha{$b} }
##對數組的值進行排序
foreach my $c ( sort bykey @k ) {
print "$c => $ha{$c}\n";
}
1 => 7
2 => 11
3 => 13
4 => 12
5 => 23
6 => 2
10 => 9
11 => 32
##sort的操作的對象是列表,處理散列其實首先是轉換爲列表形式,結果同上。
foreach my $k ( sort bykey keys %ha ) {
print "$k => $ha{$k}\n";
}
###對數組進行排序
foreach my $c ( sort byvalue @k ) {
print "$c => $ha{$c}\n";
}
6 => 2
1 => 7
10 => 9
2 => 11
4 => 12
3 => 13
5 => 23
11 => 32
###這裏的value的子過程還是比較能說明問題的,其實就是輸入兩個key的值,轉換爲value,之後再對value的值進行排序,裏面的別名現在已然不是$a or $b,結果同上。
foreach my $k ( sort byvalue keys %ha ) {
print "$k => $ha{$k}\n";
}
######################
#sort排序的基本用法還是很簡單的,但是後面的比較複雜的數據結構進行排序的時候,還是有點麻煩的,懶得看了,不好意思,就先這樣吧。