Как правильно разыменовывать многомерный массив в Perl? - PullRequest
0 голосов
/ 04 февраля 2019

В моем коде у меня есть многомерный массив

       $rows[$x][$y]

Я передаю его подфункции с многократным использованием, но в какой-то момент эта функция должна будет удалить (вытолкнуть) один из элементов изосновной массив.

Я считаю, что правильный способ передать его - обратиться к нему, поскольку я передаю больше, чем просто массив:

        filterout(\@rows, $y, $data );

Но я не уверен в синтаксисе разыменования его на стороне подпрограммы.,

Буду признателен за любую помощь, спасибо, как всегда.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Это ссылка на массив, указывающая на массив ссылок на массив, указывающих на массивы скаляров.Таким образом, вам понадобятся две разыменования для одного элемента, одна для столбца и ни одна для строки:

sub filterout(\@$$) {
     my($array_ref, $y, $data) = @_;

     # single element <row>,<col>
     $array_ref->[ <row >]->[ <column> ] = ...;

     # pop column of <row>
     pop(@{ $array_ref->[ <row> ] });

     # pop row
     pop(@{ $array_ref });
}

filterout(@rows, $y, $data);

Обратите внимание на прототип, который заставляет filterout() работать как push().

0 голосов
/ 04 февраля 2019

To pop из ссылки на массив, используйте

my $last = pop @$aref;

Или, в более поздних версиях Perl,

my $last = pop $aref->@*;

Чтобы извлечь внутренний массив, вынеобходимо разыменовать данный элемент ссылки на массив:

my $last = pop @{ $aref->[$index] };

или

my $last = pop $aref->[$index]->@*;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...