我曾阅读过以下涉及迭代的Perl代码。
for my $j (0 .. $#{$dat[$Row]})
{
$vectors{ $dat[$Row][$j] } = $j;
}
什么是
$vectors{ $dat[$Row][$j] }
代表什么?
这相当于$vectors->$dat[$Row][$j]
?
答案 0 :(得分:4)
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 :(得分:1)
$vectors
是一个散列,$dat
是一个多维数组(引用数组),$Row
和$j
是两个标量。因此,您要将$dat[$Row][$j]
哈希中%vectors
给出的密钥设置为$j
。
答案 2 :(得分:0)
%vectors
是一个哈希值
$vectors{$k}
是密钥$k
的哈希值
$dat[$Row][$j]
是二维数组的元素(列$j
,行$Row
)
因此循环正在创建一个散列,其中键是内容,值是列索引。
答案 3 :(得分:0)
$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}