2010-09-01 64 views
2

如何做一個包含數組的Perl程序,該數組指向一個哈希值?在Perl中,你如何創建和使用散列數組?

正是這樣的繪畫方式,

(M1)  (M2)  ...it goes on 
|--k1=>v1 |--K1=>v1 
|--k2=>v2 |--k2=>v2 

我應該訪問數組M1,那麼哈希它裏面包含。 (以此類推)...

+3

請參閱http://perldoc.perl.org/perldsc.html – heferav 2010-09-01 12:38:25

+3

您之前已被指向[perldocs](http://perldoc.perl.org) - 請您閱讀它們嗎? – Ether 2010-09-01 14:49:41

回答

4

這應該做到這一點 - 雖然它不是很清楚,我怎麼想「M1」和「M2」玩到場景:

my(@array) = ({ k1 => "v1", k2 => "v2" }, { K1 => "V1", K2 => "V2" }); 

print "$array[0]->{k1}\n"; 
print "$array[1]->{K2}\n"; 

你讓你的生活更當您在陣列的不同元素中使用不同的鍵集時(k1和k2與K1和K2)有趣時。這遠沒有被禁止,但它使得處理變得更加困難。

+0

Jonathan Leffler ..謝謝你的回答 – 2010-09-01 09:32:52

+0

如果一個鍵包含另一個散列(鍵和值),那麼上面的代碼片段將如何看起來像? – 2010-09-01 10:31:39

+1

@Senthil kumar密鑰不能包含散列;一個鍵是一個字符串。只有值可以是對散列或數組的引用。如果你試圖將一個引用存儲到一個鍵中,它將被轉換成一個字符串(比如'HASH(0x8d4bc28)「),它不能被轉換回引用。 – 2010-09-01 12:31:06

0

您需要一個哈希引用,如下面的{}標記。

my @array = ({ k1 => "v1", k2 => 'v2' }, { K1 => 'V1', }); 
+0

如果一個鍵包含另一個散列(鍵和值),那麼上面的代碼片段將如何看起來像?請告訴答案.. – 2010-09-01 10:29:55

4

您需要使用哈希references

my @array;  
push @array, { k1=>"v1", k2=>"v2" }, { k1=>"v1", k2=>"v2" }; 

然後,訪問哈希是這樣的:

my $val = $array[0]{k1}; 
+0

有趣的是:Perl DWIM既沒有箭頭也沒有箭頭,我用箭頭表示符號(至少,我使用的是Perl 5.13.4)。 – 2010-09-01 07:35:45

+2

@Jonathan Leffler:這只是因爲當你已經將數組或哈希(或數組/哈希引用)編入索引時,Perl知道你試圖在HAS上建立索引的運算符是一個標量,因此是一個引用,因爲只有標量可以插入到數組或散列中。所以不會有直接的列表索引或哈希查找這樣的事情 - 它必須是一個參考。然而,如果在上面的例子中你有一個'$ array_ref'而不是'@ array',那麼訪問它需要第一個箭頭,但不是第二個:'my $ val = $ array_ref - > [0] {k1 };'。 – 2010-09-01 07:40:35

+1

@Jonathan:是的,正如perldoc所述:「*括號下標之間的箭頭是可選的。」 – 2010-09-01 07:42:36

1

喜歡的東西:

%h1 = ('a'=>'abc','b'=>'bcd'); # hash 1 
%h2 = ('A'=>'Abc','B'=>'Bcd'); # hash 2 
@arr = (\%h1,\%h2); # array of hash references. 
foreach $hash_ref (@arr) { # iterate through the array. 
     foreach $key(keys %$hash_ref) { # iterate through the hash. 
       print $key.' '.$$hash_ref{$key}."\n"; #print key => value 
     } 
} 
相關問題