2013-06-21 19 views
1

我看到一個非常奇怪的一段代碼在我的項目中使用Perl腳本,它是這樣的:他們爲什麼要在數組中保存散列?

my $arrayRef = [ 
    A => {AA => 11, AAA => 111}, 
    B => {BB => 11, BBB => 111}, 
]; 

IMO,它試圖從一個哈希表構建一個匿名數組。我嘗試打印數組元素,這裏是我所得到的:

foreach (@$arrayRef) 
{ 
    print; 
    print "\n"; 
} 

A 
HASH(0x1e60220) 
B 
HASH(0x1e71bd0) 

,這意味着它把在哈希表中的每一個元素(鍵&值)作爲匿名陣列在一個單獨的元素。然而,我很困惑他們爲什麼要將散列保存到數組中。如果散列表真的很大,我的好處是節省一些內存。這是一個使用perl技巧嗎?

謝謝!

+0

如果你滿意的答案之一,請旁邊的標記。如果不是,請指定爲什麼不。歡迎來到堆棧溢出! – ikegami

回答

4

它試圖從哈希表構建一個匿名數組。

不,它構建了一個來自四元素列表的匿名數組。

A => {AA => 11, AAA => 111}, B => {BB => 11, BBB => 111} 

是完全一樣的東西

'A', {AA => 11, AAA => 111}, 'B', {BB => 11, BBB => 111} 

採用=>確實意味着某種關係,所以我想他們可以使用

{ A => {AA => 11, AAA => 111}, B => {BB => 11, BBB => 111} } 

[ [ A => {AA => 11, AAA => 111} ], [ B => {BB => 11, BBB => 111} ] ] 

或任何一百萬其他數據結構的,但有辦法知道爲什麼一個被選擇了另一種從你所付出的。

+0

這真的是我第一次看到** => **可以用作列表分隔符。這意味着我可以以這種方式構造的數組: '我的$數組引用= [A => B => C => d => E => F]' 被這意味着任何其他字符也可以被用來作爲列表分隔器? 謝謝! – chun

+0

在'F'之後你需要'=>'或者你需要引用'F',但是是的。 //我不確定我瞭解你的第二個問題。這聽起來像是在問'1 + 2 + 3 + 4 + 5'與'1,2,3,4,5'是否是相同的東西,但它顯然不是。 – ikegami

+0

我剛檢查過perl引用,發現=>和逗號實際上是一樣的東西。感謝您的幫助:-) – chun

2

這是一個匿名數組,其中交替與匿名散列字符串鍵。對你的問題的回答:這取決於上下文,具體的數據結構應該有助於解決具體的問題。因此,如果我們只有數據結構並且忘記了我們正在努力解決的問題,那麼很難想象爲什麼他們會使用這種結構。

也許,他們需要一個「哈希散列有序」,該陣列結構可以確保秩序,哈希不

+0

謝謝!這真的很有幫助:-) – chun

相關問題