Как я могу напечатать двумерный массив в Perl?

У меня есть двумерный массив. Когда я печатаю / дампа это я получаю следующее

Мой 2 тусклый массив:

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

Как видите, данные дублируются.

 dave442011 июл. 2009 г., 09:54
Покажите нам свою петлю.
 Telemachus11 июл. 2009 г., 13:49
@ Роб: опубликовать код, который создает массив. Тогда кто-то должен быть в состоянии помочь вам. Вам также следует взглянуть на два руководства во внутренней документации Perl:perldoc perllol а такжеperldoc perldsc, Они также онлайн:perldoc.perl.org/perllol.html а такжеperldoc.perl.org/perldsc.html
 Knut Haugen11 июл. 2009 г., 07:28
Элементы в матрице, которые читаются как «$ VAR-> 0» и $ VAR- [5] - это способ сказать, что Data :: Dumper содержит несколько копий одной и той же вещи в вашей структуре данных. Если вы разместите больше кода инициализации, это может помочь. Как определяется a1Comparea2?
 Aaron11 июл. 2009 г., 08:16
поэтому я немного покопался. Моя матрица формируется путем вставки в нее ссылок на массивы. Данные дублируются, если массивы последовательно помещаются в цикл. но если я объявлю @matrix = (\ @ array1, \ @ array2), то все в порядке. знаете, почему это может быть?

Ответы на вопрос(2)

Может быть, вы использовали что-то вроде:

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, производя ваш вывод.

Решение Вопроса

Правильно ли определен массив?
Вы используете@ для массива и$ для скалярных ...
Проверь этостатья для быстрого ознакомления.

Эта статья дает этот простой пример.

@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";
}
 11 июл. 2009 г., 07:13
Я думаю, как показывает дамп, моя матрица определена правильно. Я обновил вопрос, чтобы показать, как определяется моя матрица.
 11 июл. 2009 г., 08:03
@ Билл, я полагаю, вы обращаетесьrob кто написал вопрос.
 11 июл. 2009 г., 07:48
Вы что-то пропустили. Вы добавляете две ссылки на массив, но ваш дамп явно показывает больше, чем это.

Ваш ответ на вопрос