我有一个3维的数组,如:
$a[0][0]=1; $a[0][1]=2; $a[0][2]=1;
$a[1][0]=1; $a[1][1]=3; $a[1][2]=-1;
$a[2][0]=2; $a[2][1]=4; $a[2][2]=1;
我想删除前两个元素的值为1和3的行(在本例中是整个[1] [0 .. 2]元素。我想获得的输出是:< / p>
$a[0][0]=1; $a[0][1]=2; $a[0][2]=1;
$a[1][0]=2; $a[1][1]=4; $a[1][2]=1;
我正在寻找这个问题的一般解决方案。有一个条件我会使用grep
函数,但我不知道如何用2个条件来做..
答案 0 :(得分:3)
在Perl中没有2D数组这样的东西。 @a
只是一组引用。因此,您不是要删除$a[1][0 .. 2]
,而只是$a[1]
。
但你无法真正从数组中删除。使用splice
,您可以移动所有元素,
for my $i (reverse 0 .. $#a) {
splice(@a, $i, 1) if $a[$i][0]==1 && $a[$i][1]==3;
}
但是使用grep
删除不需要的元素并将其余元素分配回数组通常更简单,更有效。
@a = grep { !( $_->[0]==1 && $_->[1]==3 ) } @a;
答案 1 :(得分:1)
use Data::Dumper;
$a[0][0]=1; $a[0][1]=2; $a[0][2]=1;
$a[1][0]=1; $a[1][1]=3; $a[1][2]=-1;
$a[2][0]=2; $a[2][1]=4; $a[2][2]=1;
print Dumper(\@a);
@b=grep(!($_->[0]==1 && $_->[1]==3),@a);
print Dumper(\@b);