我曾经读过下面关于“数组的数组”的例子。AOA是一个二维数组
下面的代码片段声称要打印整个内容,其中包含refs
for $aref ( @AoA ) {
print "\t [ @$aref ],\n";
}下面的代码段声称要打印带有索引的整个内容
for $i ( 0 .. $#AoA ) {
print "\t [ @{$AoA[$i]} ],\n";
}这里的$aref代表什么?如何理解@$aref和@{$AoA[$i]}的定义?谢谢。
发布于 2011-12-23 04:31:04
$aref代表“数组引用”,即数组的引用。
my $my_aref = \@somearray;可以使用以下语法从数组引用生成数组:
@{$my_aref}@{$my_aref} is @somearray.(它不是副本,它实际上是同一个数组。)
在第二个示例中,$AoA[$i]是一个数组引用,您可以使用相同的语法@{$AoA[$i]}来取消对它的引用。
有关更多解释和示例,请参阅perlreftut。
发布于 2011-12-23 04:34:08
“数组的数组”实际上不是数组的数组。它更像是一个数组引用的数组。基础数组中的每个元素都是对另一个数组的引用。因此,当您想要遍历基本数组中的元素时,您会得到返回的数组引用。这些是在第一个循环中分配给$aref的内容。然后,通过使用@符号预先挂起来取消对它们的引用,因此@$aref是$aref数组引用所引用的数组。
同样的事情也适用于第二个循环。$AoA[$i]是@AoA数组的$i-th元素,它是一个数组引用。通过用@符号预先挂起它来取消对它的引用(为了清楚起见,可能还为了优先,添加了{} )意味着@{$AoA[$i]}是$AoA[$i]数组引用所引用的数组。
发布于 2011-12-23 05:15:43
Perl没有多维数组。可以将数组放入其他数组中以获得相同的结果。
嗯,差不多吧。数组(和散列)值是标量,因此不能将一个数组放入另一个数组中。而不是将引用放在数组中。
换句话说,"array of array“是"array of reference to array”的缩写。@AoA的每个值都是对另一个数组的引用,具有二维数组的“幻觉”。
参考资料来自use [ ]或等效的内容。[ ]创建一个匿名数组,然后创建对该数组的引用,然后返回该引用。这就是引用的来源。
构建AoA的常用方法:
my @AoA = (
[ 'a', 'b', 'c' ],
[ 'd', 'e', 'f' ],
);
my @AoA;
push @AoA, [ 'a', 'b', 'c' ];
push @AoA, [ 'd', 'e', 'f' ];
my @AoA;
$AoA[$y][$x] = $n;请记住,
$AoA[$y][$x] = $n;是的缩写
$AoA[$y]->[$x] = $n;由于自动生动,它相当于如下所示:
( $AoA[$y] //= [] )->[$x] = $n;https://stackoverflow.com/questions/8609326
复制相似问题