我刚开始学习Perl。我在Perl中尝试了一些函数并遇到了sort函数。它通过一组输入工作得很好,但是对于不同的输入,会产生不同的意外结果。
#!/usr/bin/perl
use warnings;
use strict;
use List::MoreUtils qw/ uniq /;
my @faculty = sort(1231,444,444,444,1232);
my @unique = uniq @faculty;
foreach ( @unique ) {
print $_, "\n";
}
my @array1 = sort(3,3331,32,3);
my @array = uniq @array1;
print "My array = @array\n";
这是我写的示例脚本。输出结果为:
1231 1231 444我的阵列是3 32 3331。
为什么444没有排序?
答案 0 :(得分:3)
它被排序为字符而不是数字。
尝试
my @faculty = sort {$a<=>$b} (1231,444,444,444,1232);
输出结果为:
444 1231 1232
您可以查看: sort
答案 1 :(得分:2)
Perl的sort
例程按字母顺序排序。因此1231在444之前出现。
要按数字顺序排序,请将sort
例程与数字比较运算符一起使用:
my @faculty = sort { $a <=> $b } (1231, 444, 444, 444, 1232);
答案 2 :(得分:1)
排序是作为字符串默认完成的,因此&#34; 1&#34;是在&#34; 4&#34;之前在字符串空间中,所以1234将小于444.如果你有1,2,4,10;排序顺序为1,10,2,4;
如果要对它们进行数字排序(作为数字),则需要提供块或例程来进行排序。例如,您可以使用&lt; =&gt;用于在带有排序的块中进行数值比较。
my @faculty = sort { $a <=> $b } (1231,444,444,444,1232);
将输出444,1231,1232。