这里说的不是对数值型数组的排序,因为它们的排序用@new=sort @old就可以了,没什么可以加速的
我说的是非数值型的排序,比如有个索引数组,数组里每个元素都是字符串,每个字符串作为参数传递进入ask_for_result函数后会返回一个值,我们要根据这个值的大小来对索引数组进行排序。
一般写法为:
@new=sort {ask_for_result($a) cmp ask_for_result($b)} @old;
改进写法为
@new=
map $_->[0],
sort {$a->[1] cmp $b->[1]}
map [$_,ask_for_result($_)],
@old;
减少了对ask_for_result函数的调用次数,这个方法叫做Schwartzian变换
阅读(1059) | 评论(0) | 转发(0) |