Perl中的sort函数

时间:2011-06-23 13:22:10

标签: perl

use warnings;

my @a = (1, 11, 3, 5, 21, 9, 10);

my @b = sort @a;

print "@b";
  

输出:1 10 11 21 3 5 9

键盘链接:http://codepad.org/Fvhcf3eP

我想 sort 函数不会将数组的元素作为整数。这就是为什么输出不是:

  

1 3 5 9 10 11 21

是吗?

如何将上述结果作为输出?

7 个答案:

答案 0 :(得分:12)

Perl的sort函数的默认实现是将值排序为字符串。要执行数字排序:

my @a = sort {$a <=> $b} @b;

链接页面显示了如何以不相反的顺序(降序)排序不区分大小写的其他示例,等等。

您可以创建显式子例程以防止重复:

sub byord { $a <=> $b };
...
@a = sort byord @b;

这在功能上等同于使用匿名子例程的第一个示例。

答案 1 :(得分:7)

你是对的。所以请告诉perl将其视为如下所示的整数。

cat foop.pl

use warnings;

my @a = (1, 11, 3, 5, 21, 9, 10);

my @b = sort {$a <=> $b} @a;

print "@b";


perl foop.pl 
1 3 5 9 10 11 21

答案 2 :(得分:6)

提供自定义比较功能(以数字方式比较):

sort {$a <=> $b} @array;

答案 3 :(得分:4)

这是一个数字排序:

@sorted = sort { $a <=> $b } @not_sorted   

答案 4 :(得分:4)

使用“太空飞船运营商”:sort { $a <=> $b } @a

答案 5 :(得分:4)

@b = sort { $a <=> $b } @a;

是数字

答案 6 :(得分:3)

猜测是错误的做法。如果您不理解排序,请查阅:http://perldoc.perl.org/functions/sort.html

my @b = sort{$a <=> $b} @a;