2009-07-11 7 views
4

У меня есть двумерный массив. При печати/Dump это я получаю следующееКак я могу напечатать двумерный массив в 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"; 
     } 
} 

Я получаю следующие документы tput:

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 

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

+0

Элементы в матрице, которые читают «$ VAR -> [0]» и $ VAR -> [5], - это способ Data: Dumper сказать, что в вашей структуре данных есть несколько копий одной и той же вещи. Если вы разместите более инициализирующий код, это может помочь. Как определяется a1Comparea2? –

+0

, поэтому я кое-что копал. Моя матрица формируется путем ссылки на pusshing array в нее. Данные дублируются, если массивы последовательно повторяются в цикле. но если я объявляю @matrix = (\ @ array1, \ @ array2), тогда все в порядке. знаете, почему это может быть? – 2009-07-11 06:16:28

+0

Покажите нам свою петлю. – dave4420

ответ

3

Правильно ли задан массив?
Вы используете @ для массива и $ для скаляра ...
Проверьте это article for a quick reference.


В этой статье приведен простой пример.

@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"; 
} 
+0

Я думаю, что, как показывает дамп, моя матрица определена правильно. Я обновил вопрос, чтобы показать, как определяется моя матрица. – 2009-07-11 05:13:51

+0

Вы что-то оставили. Вы добавляете два массива refs, но ваш дамп явно показывает больше, чем это. – Bill

+0

@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, производя свой выход.

Смежные вопросы