我有一个非常大的数组,我想从数组中删除第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
建议?
答案 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;