如何做一個包含數組的Perl程序,該數組指向一個哈希值?在Perl中,你如何創建和使用散列數組?
正是這樣的繪畫方式,
(M1) (M2) ...it goes on
|--k1=>v1 |--K1=>v1
|--k2=>v2 |--k2=>v2
我應該訪問數組M1
,那麼哈希它裏面包含。 (以此類推)...
如何做一個包含數組的Perl程序,該數組指向一個哈希值?在Perl中,你如何創建和使用散列數組?
正是這樣的繪畫方式,
(M1) (M2) ...it goes on
|--k1=>v1 |--K1=>v1
|--k2=>v2 |--k2=>v2
我應該訪問數組M1
,那麼哈希它裏面包含。 (以此類推)...
這應該做到這一點 - 雖然它不是很清楚,我怎麼想「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)有趣時。這遠沒有被禁止,但它使得處理變得更加困難。
Jonathan Leffler ..謝謝你的回答 – 2010-09-01 09:32:52
如果一個鍵包含另一個散列(鍵和值),那麼上面的代碼片段將如何看起來像? – 2010-09-01 10:31:39
@Senthil kumar密鑰不能包含散列;一個鍵是一個字符串。只有值可以是對散列或數組的引用。如果你試圖將一個引用存儲到一個鍵中,它將被轉換成一個字符串(比如'HASH(0x8d4bc28)「),它不能被轉換回引用。 – 2010-09-01 12:31:06
您需要一個哈希引用,如下面的{}標記。
my @array = ({ k1 => "v1", k2 => 'v2' }, { K1 => 'V1', });
如果一個鍵包含另一個散列(鍵和值),那麼上面的代碼片段將如何看起來像?請告訴答案.. – 2010-09-01 10:29:55
您需要使用哈希references:
my @array;
push @array, { k1=>"v1", k2=>"v2" }, { k1=>"v1", k2=>"v2" };
然後,訪問哈希是這樣的:
my $val = $array[0]{k1};
有趣的是:Perl DWIM既沒有箭頭也沒有箭頭,我用箭頭表示符號(至少,我使用的是Perl 5.13.4)。 – 2010-09-01 07:35:45
@Jonathan Leffler:這只是因爲當你已經將數組或哈希(或數組/哈希引用)編入索引時,Perl知道你試圖在HAS上建立索引的運算符是一個標量,因此是一個引用,因爲只有標量可以插入到數組或散列中。所以不會有直接的列表索引或哈希查找這樣的事情 - 它必須是一個參考。然而,如果在上面的例子中你有一個'$ array_ref'而不是'@ array',那麼訪問它需要第一個箭頭,但不是第二個:'my $ val = $ array_ref - > [0] {k1 };'。 – 2010-09-01 07:40:35
@Jonathan:是的,正如perldoc所述:「*括號下標之間的箭頭是可選的。」 – 2010-09-01 07:42:36
喜歡的東西:
%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
}
}
在教你的利益魚,這裏有關於在Perl中構建複雜數據結構的鏈接Perl data structures cookbook (perldsc)。
請參閱http://perldoc.perl.org/perldsc.html – heferav 2010-09-01 12:38:25
您之前已被指向[perldocs](http://perldoc.perl.org) - 請您閱讀它們嗎? – Ether 2010-09-01 14:49:41