2011-12-19 24 views
1

繰り返しを含む以下のPerlコードを読んでいます。データ構造の説明

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

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

は何を略ですか? $vectors->$dat[$Row][$j]に相当しますか?

+1

あなたのタイトルは大幅に改善することができ、

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

の略ですか? – reinierpost

答えて

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

$vectorsは、多次元配列(参照配列)と$Row$j 2つのスカラーのハッシュです。したがっての%vectorsハッシュのキーを$jに設定しています。

0

%vectorsはハッシュです。
$vectors{$k}そこでループは、キーコンテンツとなるハッシュを作成している

キー$k
$dat[$Row][$j]のハッシュの値が2次元配列(カラム$j、行$Row)の要素でありますvalueは列インデックスです。反復それをどうするか持っています - あなたはそれを綴る場合

0
$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}