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)
要摆脱未定义的元素并对其余元素进行排序:
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)