shu*_*ter 0 arrays perl data-structures
在Perl中处理二维数组让我很头疼.无论如何,以下是我的问题:
我有一个循环将一个数组(比如@twoOneArray)推入另一个数组,比如说@twoDimArray,然后在循环的下一次迭代开始之前重置,然后再次用新的值集推入@twoDimArray.当我使用以下任一方式打印此@twoDimArray时:
print Dumper \@twoDimArray;
Run Code Online (Sandbox Code Playgroud)
它给出了输出
OUTPUT
$VAR1 = [
[
'BB',
'AA',
'AA'
],
$VAR1->[0],
$VAR1->[0],
$VAR1->[0]
];
Run Code Online (Sandbox Code Playgroud)
或使用循环
for (my $i=0; $i<4; $i++){
for (my $j=0; $j<4; $j++){
print "$twoDimArray[$i][$j] \n";
}
}
Run Code Online (Sandbox Code Playgroud)
数据重复.
OUTPUT
行= 0 BB AA AA
行= 1 BB AA AA
行= 2 BB AA AA
行= 3 BB AA AA
等等....
我无法弄清楚为什么两种输出方式都出错了.如果我每次都打印@twoDimArray(在移动到循环的下一次迭代之前,即在使用push函数之后)插入@twoOneArray,那么值似乎很好并且不重复自己,但是在单个go中打印它似乎给出了上述错误.这里也有类似的问题,但我不确定这对我是否有意义.有什么建议?
构建2D数组的代码:
for ($k = 1; $k <= $counter; $k++){
@twoOneArray = (); #reset it when loop starts again
for ($j = 0; $j <= $colsInArray; $j++){
#do stuff to create @twoOneDim
}
push @twoDimArray, \@twoOneArray;
#if I print @twoDimArray if prints fine, with the exact values intact
}
print Dumper \@twoDimArray; #if I print it here it messes up
print "\n";
Run Code Online (Sandbox Code Playgroud)
inn*_*naM 10
Data :: Dumper的输出告诉我你的问题不是打印数组.Data :: Dumper永远不会说谎(或很少).
请告诉我们您用于构建阵列的代码.我确定错误在某个地方的代码中.
更新:
现在你添加了构建数组的代码,我发现你陷入了一个邪恶的陷阱:你正在将@twoOneArray的引用添加到你的"外部"数组中.但是每次通过循环时引用总是相同的.像这样更改你的代码:
for ($k = 1; $k <= $counter; $k++){
my @twoOneArray; # REALLY reset it when loop starts again
for ($j = 0; $j <= $colsInArray; $j++){
#do stuff to create @twoOneDim
}
push @twoDimArray, \@twoOneArray;
}
Run Code Online (Sandbox Code Playgroud)
..它应该工作.