在 perl 脚本中我们经常会对数组或者 hash 键 进行排序,以使输出的数据满足我们的要求,常用的是 sort 函数。但是对于字符串+数字 组成的一些值有时候就排序结果就不那么理想了。这时候 施瓦兹变换就要隆重登场了。
其经常用的有如下结构方式:
my @p = [...];
my @p_sort = map{$_->[0]}
sort {$a->[1] <=> $b->[1] # 按照第一列 / 第一个 [ 数值 ] 从小到大
or $b->[2] <=> $a->[2] # 按照第一列 / 第一个 [ 数值 ] 从大到小
or $a->[3] cmp $b->[3] # 按照第一列 / 第一个 [ 字符串 ] 从少到多
or $b->[4] cmp $a->[4] # 按照第一列 / 第一个 [ 字符串 ] 从多到少
}
map{ my @z = split (/\t/,$_); [$_,$z[1],$z[2] ]; }@p;
print "$_\n" foreach (@p_sort);
本代码的示例适用于多列,或者字符串与数字组成的 ID 之类的名称排序。