如何从Perl数组中删除元素?

时间:2010-11-04 21:30:46

标签: arrays perl

我有一个非常大的数组,我想从数组中删除第2,第8,第14等元素。我的阵列目前是这样的:

Element1 x A B C
Element 2 y A B C
Element 3 z A B C

从广义上讲,我想删除x,y和z(仅作为示例,我的数组稍微复杂一些)。然后拉起剩下的部分。如同,我不希望他们的位置有空白。我想得到:

Element 1 A B C
Element 2 A B C
Element 3 A B C

我尝试用我的数组“todelete”试试这个:

print "#Before Deleting"; print
$todelete[0]; print "\n"; print
$todelete[2]; print "\n"; print
$todelete[3];

for ($count=2; $count<@todelete;
$count=$count+6) {  delete
$todelete[$count]; }

print "#After Deleting"; print
$todelete[0]; print "\n"; print
$todelete[2]; print "\n"; print
$todelete[3];$todelete[3];

但是,目前,我认为它只是将我的价值统一起来,因为当我打印结果时,它告诉我:

Use of uninitialized value in print 

建议?

3 个答案:

答案 0 :(得分:5)

您想要的功能是splice

答案 1 :(得分:2)

delete $array[$index]与调用$array[$index] = undef相同;它会在您的数组中留下一个空格。对于您的具体问题,如何

@array = @array[ grep { $_ % 6 != 2 } 0 .. $#array ];

答案 2 :(得分:2)

您也可以使用grep作为过滤器:

my $cnt = 0; @todelete = grep { ++$cnt % 6 != 2 } @todelete;