1 my @sorted =
2 map $_->[0],
3 sort { SORT COMPARISON USING $a->[1] AND $b->[1] }
4 map [ $_, EXPENSIVE FUNCTION OF $_ ],
5 @original;
6
举例:
1 # case insensitive sorting in alphabetical order
2 my @sorted =
3 map $_->[0],
4 sort { $a->[1] cmp $b->[1] }
5 map [ $_, "\U$_" ],
6 @original
在三级排序中使用施瓦茨变换:
1 # 首先用SOME FUNCTION排序,再用ANOTHER排序,最后用
2 # YET ANOTHER排序
3 my @sorted =
4 map $_->[0],
5 sort { SORT COMPARISON USING $a->[1] AND $b->[1] or
6 ANOTHER USING $a->[2] AND $b->[2] or
7 YET ANOTHER USING $a->[3] AND $b->[3] }
8 map [ $_, SOME FUNCTION OF $_, ANOTHER, YET ANOTHER ],
9 @original;
10
或者将每次计算的结果保存一下,这也避免了重复计算(举例用cmp做字符串比较):