在 perl 腳本中我們經(jīng)常會(huì)對(duì)數(shù)組或者 hash 鍵 進(jìn)行排序,以使輸出的數(shù)據(jù)滿足我們的要求,常用的是 sort 函數(shù)。但是對(duì)于字符串+數(shù)字 組成的一些值有時(shí)候就排序結(jié)果就不那么理想了。這時(shí)候 施瓦茲變換就要隆重登場(chǎng)了。
其經(jīng)常用的有如下結(jié)構(gòu)方式:
my @p = [...];
my @p_sort = map{$_->[0]}
sort {$a->[1] <=> $b->[1] # 按照第一列 / 第一個(gè) [ 數(shù)值 ] 從小到大
or $b->[2] <=> $a->[2] # 按照第一列 / 第一個(gè) [ 數(shù)值 ] 從大到小
or $a->[3] cmp $b->[3] # 按照第一列 / 第一個(gè) [ 字符串 ] 從少到多
or $b->[4] cmp $a->[4] # 按照第一列 / 第一個(gè) [ 字符串 ] 從多到少
}
map{ my @z = split (/\t/,$_); [$_,$z[1],$z[2] ]; }@p;
print "$_\n" foreach (@p_sort);
本代碼的示例適用于多列,或者字符串與數(shù)字組成的 ID 之類的名稱排序。