数据结构说明

时间:2011-12-19 19:57:28

标签: arrays perl hash

我曾阅读过以下涉及迭代的Perl代码。

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

什么是

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

代表什么? 这相当于$vectors->$dat[$Row][$j]

4 个答案:

答案 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}