迭代地从数组中删除元素

时间:2014-07-17 15:19:35

标签: perl

我有一个数组,@cuts,我想从@Data中删除元素的索引。这是一种合适的方法吗?

foreach (@cuts){

    $Data[$_] = "NULL";

}


for my $i (0 .. $#Data){
    if ($Data[$i] eq "NULL"){
        splice(@Data,$i,1);
        } 
}

3 个答案:

答案 0 :(得分:3)

您无需使用标记值("NULL")。

my %cuts = map { $_ => 1 } @cuts;
my @keeps = grep !$cuts{$_}, 0..$#Data;
@Data = @Data[@keeps];

通过将其与前面的代码合并,肯定可以简化。

答案 1 :(得分:2)

my @newData = grep { !/^NULL\z/ } @Data;

答案 2 :(得分:2)

结合@toolic和@ user2752322:

delete @Data[@cuts];
my @newData = grep { defined } @Data;