什么是取消引用Perl中多维数组的正确方法?

问题描述 投票:0回答:2

在我的代码我有一个多维数组

       $rows[$x][$y]

我将它传递给一个子功能,具有多种用途,但在某些时候该功能将需要删除(POP)从主数组中的元素之一。

我相信通过它是由引用它,因为我传递的不仅仅是阵列更正确的方法:

        filterout(\@rows, $y, $data );

但我不能确定的语法来提领它的子程序侧。

希望得到任何帮助,感谢一如既往。

perl multidimensional-array
2个回答
-3
投票

它的裁判指向指向标量的阵列阵列裁判的阵列的阵列。所以你需要一个单一的元素,一个用于列,没有对连续两次解引用:

sub filterout(\@$$) {
     my($array_ref, $y, $data) = @_;

     # single element <row>,<col>
     $array_ref->[ <row >]->[ <column> ] = ...;

     # pop column of <row>
     pop(@{ $array_ref->[ <row> ] });

     # pop row
     pop(@{ $array_ref });
}

filterout(@rows, $y, $data);

需要注意的原型,这使得filterout()push()工作。


7
投票

从阵列参考pop,使用

my $last = pop @$aref;

或者说,在最近的Perl版本,

my $last = pop $aref->@*;

为了弹出内阵列时,需要解除引用数组引用的给定元素:

my $last = pop @{ $aref->[$index] };

要么

my $last = pop $aref->[$index]->@*;
© www.soinside.com 2019 - 2024. All rights reserved.