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
如何将上述结果作为输出?
答案 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;