Perl - 排序如何发生?

时间:2014-09-29 04:43:32

标签: perl sorting

我刚开始学习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没有排序?

3 个答案:

答案 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。