Perl中的sort函数

Cha*_*hak 4 perl

use warnings;

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

my @b = sort @a;

print "@b";
Run Code Online (Sandbox Code Playgroud)

产量:1 10 11 21 3 5 9

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

我猜sort函数没有将数组的元素作为整数.这就是为什么输出不是:

1 3 5 9 10 11 21

是吗?

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

Qui*_*ith 12

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

my @a = sort {$a <=> $b} @b;
Run Code Online (Sandbox Code Playgroud)

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

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

sub byord { $a <=> $b };
...
@a = sort byord @b;
Run Code Online (Sandbox Code Playgroud)

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


Gid*_*ise 7

你是对的.所以告诉perl将它视为如下所示的整数.

猫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
Run Code Online (Sandbox Code Playgroud)


mhy*_*itz 6

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

sort {$a <=> $b} @array;
Run Code Online (Sandbox Code Playgroud)