我该如何在Perl中打印一个二维数组?

4

我有一个二维数组。当我打印/转储时,我得到以下结果:

我的二维数组:

push (@matrix, \@a1Comparea2);
push (@matrix, \@a3Comparea4);

a1Comparea2应该是数组的第一行。a3Comparea4应该是数组的第二行。

$VAR1 = [
          [
            '1 6',
            '2 7',
            '3 8',
            '4 9',
            '5 10'
          ],
          $VAR1->[0],
          $VAR1->[0],
          $VAR1->[0],
          $VAR1->[0],
          [
            '7 12',
            '8 13',
            '9 14',
            '10 15',
            '11 16'
          ],
          $VAR1->[5],
          $VAR1->[5],
          $VAR1->[5],
          $VAR1->[5]
        ];

当我使用以下代码尝试打印这个内容时:

for (my $j= 0; $j < $rows; $j++)
{
    for (my $k= 0; $k < @a1; $k++)
    {
        print "Row:$j Col:$k = $matrix[$j][$k]\n";
    }
}

我得到了以下输出:
Row:0 Col:0 = 1 6
Row:0 Col:1 = 2 7
Row:0 Col:2 = 3 8
Row:0 Col:3 = 4 9
Row:0 Col:4 = 5 10
Row:1 Col:0 = 1 6
Row:1 Col:1 = 2 7
Row:1 Col:2 = 3 8
Row:1 Col:3 = 4 9
Row:1 Col:4 = 5 10

正如您所看到的,数据是重复的。


矩阵中读取"$VAR->[0]"和"$VAR->[5]"的元素是Data::Dumper表示您的数据结构中存在多个相同内容的方式。如果您发布更多初始化代码,则可能会有所帮助。a1Comparea2如何定义? - Knut Haugen
所以我进行了一些调查。我的矩阵是通过将数组引用推入其中来形成的。如果在循环中顺序推送数组,则数据会重复。但是,如果我声明@matrix = (@array1, @array2),那么一切都没问题。你知道为什么吗? - Aaron
@ Rob:发布创建数组的代码。然后有人应该能够帮助你。你还应该查看Perl内部文档中的两个教程:perldoc perllolperldoc perldsc。它们也可以在线查看:http://perldoc.perl.org/perllol.html和http://perldoc.perl.org/perldsc.html。 - Telemachus
2个回答

3

你的数组定义正确吗?
对于数组使用@,对于标量使用$...
查看这篇文章快速参考


该文章给出了以下简单示例。

@matrix = (
        [3, 4, 10],
        [2, 7, 12],
        [0, 3, 4],
        [6, 5, 9],
      );

这将创建一个有四行三列的数组。要打印数组的元素,请输入:

for($row = 0; $row < 4; $row++) {
    for($col = 0; $col < 3; $col++) {
        print "$matrix[$row][$col] ";
    }
    print "\n";
}

我认为根据转储显示,我的矩阵已经正确定义。我已更新问题以展示我的矩阵如何定义。 - Aaron
你漏掉了一些东西。你添加了两个数组引用,但是你的转储明显显示出更多的内容。 - Bill
@Bill,我猜你是在回答提问的rob - nik

1

你确定你使用的是上面展示的代码吗?

也许你使用了类似下面的代码:

for (my $j=0; $j < $rows; $j++)
{
    for (my $k=0; $k < @a1; $k++)
    {
        print "Row:$j Col:$k = $matrix[$not_j][$k]\n";
    }
}

$not_j 永远会计算为 0,导致您的输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接