Объяснение структур данных - PullRequest
1 голос
/ 19 декабря 2011

Однажды я прочитал следующий код Perl, включающий итерации.

for my $j (0 .. $#{$dat[$Row]})
{
    $vectors{ $dat[$Row][$j] } = $j;
}

Что значит

$vectors{ $dat[$Row][$j] } 

обозначает? Это эквивалентно $vectors->$dat[$Row][$j]?

Ответы [ 4 ]

4 голосов
/ 20 декабря 2011
what does $vectors{ $dat[$Row][$j] } stand for?

$dat[$Row] является ссылкой на массив. $dat[$Row][$j], очевидно, является элементом в этом массиве. Независимо от значения, содержащегося в нем, он становится хеш-ключом в %vectors, который получает значение $j.

Is that equivalent $vectors->$dat[$Row][$j]

Нет, это будет относиться к переменной $vectors, а не %vectors.

Более читабельный способ написать это может быть:

my $aref = $dat[$Row];   
for my $index (keys @$aref) {
    my $key = $aref->[$index];
    $vectors{$key} = $index;
}

Что также иллюстрирует использование -> для разыменования ссылки.

1 голос
/ 20 декабря 2011

$vectors - это хеш, $dat - многомерный массив (массив ссылок), а $Row и $j - два скаляра.Таким образом, вы устанавливаете ключ, заданный $dat[$Row][$j] в хеше %vectors, на $j.

0 голосов
/ 20 декабря 2011
$vectors{ $dat[$Row][$j] } 

- это сокращение от

$vectors{ $dat[$Row]->[$j] } 

Если вы это произнесете,

# $Row is a row index.
# $j is a column index.
# (How inconsistent!)

my $row = $dat[$Row];   # A ref to an array.
my $key = $row->[$j];   # A value from the table.
$vectors{$key}
0 голосов
/ 20 декабря 2011

%vectors - это хэш.
$vectors{$k} - это значение в хэше для ключа $k
$dat[$Row][$j] - это элемент двумерного массива (столбец $j, строка $Row)

Таким образом, цикл создает хеш, где ключ - это содержимое, а значение - индекс столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...