首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于访问数组的数组

关于访问数组的数组
EN

Stack Overflow用户
提问于 2011-12-23 04:24:17
回答 4查看 1.2K关注 0票数 1

我曾经读过下面关于“数组的数组”的例子。AOA是一个二维数组

下面的代码片段声称要打印整个内容,其中包含refs

代码语言:javascript
复制
for $aref ( @AoA ) {
  print "\t [ @$aref ],\n";
}

下面的代码段声称要打印带有索引的整个内容

代码语言:javascript
复制
for $i ( 0 .. $#AoA ) {
  print "\t [ @{$AoA[$i]} ],\n";
}

这里的$aref代表什么?如何理解@$aref@{$AoA[$i]}的定义?谢谢。

EN

回答 4

Stack Overflow用户

发布于 2011-12-23 04:31:04

$aref代表“数组引用”,即数组的引用。

代码语言:javascript
复制
my $my_aref = \@somearray;

可以使用以下语法从数组引用生成数组:

代码语言:javascript
复制
@{$my_aref}

@{$my_aref} is @somearray.(它不是副本,它实际上是同一个数组。)

在第二个示例中,$AoA[$i]是一个数组引用,您可以使用相同的语法@{$AoA[$i]}来取消对它的引用。

有关更多解释和示例,请参阅perlreftut

票数 5
EN

Stack Overflow用户

发布于 2011-12-23 04:34:08

“数组的数组”实际上不是数组的数组。它更像是一个数组引用的数组。基础数组中的每个元素都是对另一个数组的引用。因此,当您想要遍历基本数组中的元素时,您会得到返回的数组引用。这些是在第一个循环中分配给$aref的内容。然后,通过使用@符号预先挂起来取消对它们的引用,因此@$aref$aref数组引用所引用的数组。

同样的事情也适用于第二个循环。$AoA[$i]@AoA数组的$i-th元素,它是一个数组引用。通过用@符号预先挂起它来取消对它的引用(为了清楚起见,可能还为了优先,添加了{} )意味着@{$AoA[$i]}$AoA[$i]数组引用所引用的数组。

票数 1
EN

Stack Overflow用户

发布于 2011-12-23 05:15:43

Perl没有多维数组。可以将数组放入其他数组中以获得相同的结果。

嗯,差不多吧。数组(和散列)值是标量,因此不能将一个数组放入另一个数组中。而不是将引用放在数组中。

换句话说,"array of array“是"array of reference to array”的缩写。@AoA的每个值都是对另一个数组的引用,具有二维数组的“幻觉”。

参考资料来自use [ ]或等效的内容。[ ]创建一个匿名数组,然后创建对该数组的引用,然后返回该引用。这就是引用的来源。

构建AoA的常用方法:

代码语言:javascript
复制
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;

请记住,

代码语言:javascript
复制
$AoA[$y][$x] = $n;

是的缩写

代码语言:javascript
复制
$AoA[$y]->[$x] = $n;

由于自动生动,它相当于如下所示:

代码语言:javascript
复制
( $AoA[$y] //= [] )->[$x] = $n;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8609326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档