Подтвердить что ты не робот

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

Я немного новичок в Perl, но вот что я хочу сделать:

my @array2d;
while(<FILE>){
  push(@array2d[$i], $_);
}

Он не компилируется, поскольку @array2d[$i] не является массивом, а является скалярным значением.

Как мне объявить @array2d как массив массива?

Конечно, я понятия не имею, сколько строк у меня.

4b9b3361

Ответ 1

Чтобы создать массив массивов или, точнее, массив arrayrefs, попробуйте что-то вроде этого:

my @array = ();
foreach my $i ( 0 .. 10 ) {
  foreach my $j ( 0 .. 10 ) {
    push @{ $array[$i] }, $j;
  }
}

Он выталкивает значение на разыменованный arrayref для вас. Вы должны иметь доступ к записи вроде этого:

print $array[3][2];

Ответ 2

Измените строку "push" на это:

push(@{$array2d[$i]}, $_);

В основном вы создаете массив $array2d [$ i], окружая его @{}... Затем вы можете нажимать элементы на этот массив ссылок на массивы.

Ответ 3

Посмотрите perlref и perldsc, чтобы увидеть, как создавать вложенные структуры данных, например массивы массивов и хеши хешей. Очень полезно, когда вы делаете Perl.

Ответ 4

На самом деле нет разницы между тем, что вы написали, и этим:

@{$array2d[$i]} = <FILE>;

Я могу только предположить, что вы выполняете итерацию через файлы.

Чтобы избежать отслеживания счетчика, вы можете сделать это:

...
push @array2d, [ <FILE> ];
...

Это говорит: 1) создать ссылку на пустой массив, 2) сохранить все строки в FILE, 3) нажать на @array2d.

Ответ 5

Еще один простой способ - использовать хеш-таблицу и использовать два индекса массива для создания хэш-ключа:

$two_dimensional_array{"$i $j"} = $val;

Ответ 6

Если вы просто пытаетесь сохранить файл в массиве, вы также можете сделать это:

fopen(FILE,"<somefile.txt");
@array = <FILE>;
close (FILE);