【发布时间】:2011-04-11 21:09:30
【问题描述】:
我正在尝试迭代以这种特定方式构造的二维数组。这是否是构造数组的好方法是另一个问题 - 我仍然需要能够迭代它(如果可能的话)。
@row1 = ( "Current Scan", "Last Month");
@row2 = ( "240", "0");
@row3 = ( "226", "209");
@row4 = ( "215", "207");
@array = (\@row1, \@row2, \@row3, \@row4);
print Dumper(@array);
printarray(@array);
Dumper 给了我以下输出:
$VAR1 = [
'Current Scan',
'Last Month'
];
$VAR2 = [
'240',
'0'
];
$VAR3 = [
'226',
'209'
];
$VAR4 = [
'215',
'207'
];
我已经尝试了几个 for 循环,但都没有成功。每个只打印第一行 ($VAR1) 并退出。这是我最近的尝试:
sub printarray {
@array = shift;
$rowi = 0;
foreach my $row (@array) {
for (my $coli = 0; $coli <= @$row; $coli++) {
print "$array[$rowi][$coli]\n";
}
$rowi++;
}
}
我显然忽略了一些简单的事情。我究竟做错了什么?提前致谢!
【问题讨论】:
-
不确定您期望得到什么结果,但使用
length函数时出现错误。您不需要它,因为它返回字符串的长度。使用$coli < @$row作为循环条件。 -
谢谢,我已经对其进行了编辑,希望能更清楚一点。我基本上只是想遍历整个数组,由于某种原因它只遍历第一行。
-
我认为我遗漏了一个非常重要的部分。起初我以为只是我搞砸了迭代,但我忘记了我正在通过一个子程序传递它......我猜这就是问题......
-
您使用的数据转储程序错误。请记住,Perl 将函数参数中的数组扩展为列表,因此如果您想要转储顶级数组,则需要使用
print Dumper \@array;而不是您所拥有的。 Perl 的列表扩展使普通函数调用类似于使用 APPLY 函数调用的 Lisp 函数。请参阅en.wikipedia.org/wiki/Apply 了解更多信息。 -
另外,请参阅 perldoc 中的 perllol 和 perldsc,了解使用常见数据结构的示例。见perldoc.perl.org/perllol.htmlperldoc.perl.org/perldsc.html
标签: arrays perl multidimensional-array