如果没有定义数组中的所有元素,如何在Perl中对数组进行排序?

And*_*nga 1 arrays sorting perl

如果未定义数组中的所有元素,如何对数组进行排序?

my @names;
$names[0]  = "andrei";
$names[1]  = "serghei";
$names[7]  = "valerii";
$names[10] = "alexandr";

@names = sort @names; # aint working.
Run Code Online (Sandbox Code Playgroud)

我向大家道歉,我只是不知道如何在这里正确地发布问题.我尝试了常见问题,我只是不明白.

小智 6

undef低于任何非空字符串,这就是它在开头排序的原因.你可能想要的是一个"清理"的结果数组,undef删除所有元素?如果是这样,在这里:

#!/usr/bin/perl

use strict;
use Data::Dumper;

my @names;
$names[1] = 'alpha';
$names[3] = 'gamma';
$names[10] = 'beta';
@names = sort grep { defined } @names;

print Dumper(\@names);

# $VAR1 = [
#   'alpha',
#   'beta',
#   'gamma'
# ];
Run Code Online (Sandbox Code Playgroud)


ike*_*ami 5

要摆脱未定义的元素并对其余元素进行排序:

sort grep defined, @names
Run Code Online (Sandbox Code Playgroud)

要将未定义的元素放在开头:

sort { !defined($a) && !defined($b) ? 0
     : !defined($a) ? -1
     : !defined($b) ? +1
     : $a cmp $b
} @names
Run Code Online (Sandbox Code Playgroud)

要将未定义的元素放在末尾:

sort { !defined($a) && !defined($b) ? 0
     : !defined($a) ? +1
     : !defined($b) ? -1
     : $a cmp $b
} @names
Run Code Online (Sandbox Code Playgroud)