2013-12-11 132 views
-2

哈希引用的數組引用的(0級或更多級哈希引用)的散列。請注意,葉節點上方的級別將始終是數組引用,即使它們只有一個元素。Perl動態哈希遍歷

我需要通過保留哈希refs的順序(按照插入的順序)來獲取VALUE的集合總和(在數組ref中)。

例子:

1)

(
    A => { 
      A1 => [ 
       { VALUE => 10 }, 
       { VALUE => 20 } 
      ], 
      B1 => [ 
       { VALUE => 30 } 
      ], 
     }, 
    B => { 
      A1 => [ 
       { VALUE => 10 } 
      ], 
      B1 => [ 
       { VALUE => 5 } 
      ], 
     }, 
    C => { 
      A1 => [ 
       { VALUE => 100 } 
      ], 
     }, 
) 

The required output of the above structure will be - 

(
    [A, A1, 30], 
    [A, B1, 30], 
    [B, A1, 10], 
    [B, B1, 5], 
    . 
    . 
    . 
    . 
) 

2)

(
    A => [ 
      { VALUE => 10 }, 
      { VALUE => 20 } 
     ], 
    B => [ 
      { VALUE => 30 } 
     ], 
)  

The required output of the above structure will be - 

(
    [A, 30], 
    [B, 30] 
) 
+2

你是什麼意思「通過保留哈希引用順序?」它們被插入的順序?按字母順序?還有別的嗎? – ThisSuitIsBlackNot

+0

你需要使用函數ref()來確定你有什麼類型的引用。散列中的鍵具有獨立於插入順序的順序。你可以使用排序(鍵(%{$ hash_ref}))。 – alex

+0

@ThisSuitIsBlackNot它們按照它們被插入的順序 –

回答

1

你需要編寫,將走你的哈希結構,並計算所需資金的功能。對於哈希每個鍵,它需要做出這個決定:

  • 如果該鍵的值是一個列表裁判,再總結的哈希值VALUE元素在此列表中,並返回[鍵,總和]

  • 如果這個散列的值是一個散列引用,那麼遞歸到這個散列。如果我們從它得到一個列表,將它附加到我們當前的輸出並繼續。

  • 在頂層(深度0),打印出返回的每個列表。

有一些細節仍需要解決,但這應該讓你開始正確的軌道。