如何在Perl中对数字进行排序?

Laz*_*zer 24 arrays sorting perl

print "@_\n";
4109 4121 6823 12967 12971 14003 20186
Run Code Online (Sandbox Code Playgroud)

我如何在Perl中对它进行排序?

使用@sorted = sort(@_);给我一个字母顺序

13041 13045 14003 20186 4109 4121 6823
Run Code Online (Sandbox Code Playgroud)

我如何获得数字排序?Perl是否具有用于合并排序,插入排序等的内置函数?

sle*_*ske 48

您可以将自定义比较函数传递给Perl的排序例程.只需使用:

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

sort函数以代码块的形式接受自定义比较函数作为其第一个参数.该{...}部分只是这个代码块(参见http://perldoc.perl.org/functions/sort.html).

sort每当需要比较要排序的数组中的两个元素时,它将调用此自定义比较函数.sort总是传递两个值来比较为$a,$b和比较函数必须返回比较的结果.在这种情况下,它只是使用运算符进行数值比较(请参阅http://perldoc.perl.org/perlop.html#Equality-Operators),这可能是为此目的而创建的:-).

解决方案无耻地从" Perl Cookbook ",第04章第15章中偷走了(买书 - 这是值得的!)


Eug*_*ash 9

提供比较功能sort():

# sort numerically ascending
my @articles = sort {$a <=> $b} @files;

# sort numerically descending
my @articles = sort {$b <=> $a} @files;
Run Code Online (Sandbox Code Playgroud)

默认的排序功能cmp,字符串比较,这将整理(1, 2, 10)(1, 10, 2).<=>,上面使用的是数值比较运算符.


cod*_*ict 8

sort默认情况下,Perl 按ASCII顺序按字母顺序排序.要以数字方式排序,您可以使用:

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


too*_*lic 6

这是一个Perl常见问题解答.从命令行:

perldoc -q sort
Run Code Online (Sandbox Code Playgroud)

perlfaq4:如何按(任何)排序数组?


ada*_*mse 5

@l = (4109, 4121, 6823, 12967, 12971, 14003, 20186, 1, 3, 4);
@l = sort { $a <=> $b } @l;
print "@l\n"; # 1 3 4 4109 4121 6823 12967 12971 14003 20186
Run Code Online (Sandbox Code Playgroud)

你必须提供自己的排序子程序 { $a <=> $b }