3

如果我有一个二维数组,怎么可能访问循环内的整个子数组?现在我有

foreach my $row(@data){  
 foreach my $ind(@$row){  
  #perform operations on specific index  
 }  
}

但理想情况下,我正在寻找类似的东西

foreach my $row(@data){  
  #read row data like $row[0], which if it has the data I'm looking for  
  #I can go ahead and access $row[3] while in the same row..
}  

我对 Perl 还很陌生,所以可能还不明白一些东西,但是当我尝试以我想要的方式使用它时,我一直保持“全局符号“@row”需要明确的包名称”。

4

3 回答 3

6

你很近。$row是一个数组引用,您可以使用 deference 运算符访问它的元素->[...]

foreach my $row (@data) {
    if ($row->[0] == 42) { ... }

$row[0]指的是数组 variable 的一个元素@row,它是一个完全不同的(可能是未定义的——因此是Global symbol ...错误消息)变量$row

于 2013-10-01T19:59:09.920 回答
3

如果$row在您的代码示例中应该是子数组或数组引用,则必须使用间接表示法来访问其元素,例如$row->[0],$row->[1]等。

你的错误的原因是因为$row[0]实际上意味着存在一个 array @row,它可能不存在于你的脚本中。

于 2013-10-01T19:57:41.640 回答
1

你也可以试试这个...

my @ary = ( [12,13,14,15],
        [57,58,59,60,61,101],
        [67,68,69],
        [77,78,79,80,81,301,302,303]);

for (my $f = 0 ; $f < @ary ; $f++) {
    for (my $s = 0 ; $s < @{$ary[$f]} ; $s++ ) {
        print "$f , $s , $ary[$f][$s]\n";
    }
    print "\n";
}
于 2017-04-21T05:12:58.657 回答