如何获取解除引用的匿名数组的第n个元素?

时间:2018-05-03 00:34:36

标签: perl

use strict;

my $anon = [1,3,5,7,9];
my $aref  = [\$anon];

print "3rd element: "  . $ { $aref } [2] . "\n";

我想在$anon变量上获取匿名数组$aref的第n个元素。在代码中我想通过使索引2获得$anon的第3个元素,但它什么也没有返回。如果我写$ { $aref } [0]然后它返回类似REF(0x7fd459027ac0)

我如何获得第n个,例如$anon的第3个元素?

理由:

my @area = (
    qw[1 3 5 7 9],
    qw[2 4 6 8 0],
    qw[a e i u o],
    qw[b c d f g]
    );

foreach my $row (@area) {
    foreach my $cell (@$row)
    {
    # do some processing on the element
    print $cell . " ";
    }
    print "\n";
}

2 个答案:

答案 0 :(得分:3)

  

如何获取解除引用的匿名数组的第n个元素?

您有太多运算符的引用。你已经构建了一个三层深度的嵌套结构,难怪你在导航时遇到了麻烦

问题是您的 for (let i = 0; i < 4; i++) { const promise = this.http.get<any>('https://randomuser.me/api/').toPromise(); promises.push(promise); } 已经是对匿名数组的引用。方括号$anon构造一个匿名数组并返回对它的引用

然后你有

[...]

使用一个元素创建对数组的另一个引用:对标量 my $aref = [\$anon] 的引用。

所以你已经构建了这个

$anon

所以

$anon = [1, 3, 5, 7, 9]

$aref = [ \ [1, 3, 5, 7, 9] ]

但是你为什么要使用对数组的引用,特别是对标量的引用?最好从普通数组开始,然后编写

${$aref}[0]          is \ [1, 3, 5, 7, 9]
${${$aref}[0]}       is [1, 3, 5, 7, 9]
${${${$aref}[0]}}[2] is 5

输出

my @array = ( 1, 3, 5, 7, 9 );
my $aref = \@array;

print $aref->[2];

答案 1 :(得分:1)

你有一个经典的列表清单数据结构,有一个扭曲。您需要获取由$aref给出的外部数组引用的第一个元素,取消引用结果,然后获取该表达式返回的内部数组引用的 n 元素。这应该可以解决问题:

${ $aref->[0] }->[2]

您可能需要仔细阅读perllol,甚至可能阅读perlref以获取更多信息和想法。如果您可以控制此数据结构,则可以使用更好的方法来构建它。例如,如果它是这样构建的:

my $anon = [1, 3, 5, 7, 9]; # a reference to an anonymous array
my $aref = [$anon]; # a reference to an anonymous array containing only the above reference

你可以这样做:

$aref->[0][2]