2017-08-19 126 views
4

如果我想使用循環向mother_hash中的所有陣列添加新的散列,那麼語法是什麼?如何將一個新的散列附加到散列數組?

我的哈希:

my %mother_hash = (
    'daughter_hash1' => [ 
     { 
      'e' => '-4.3', 
      'seq' => 'AGGCACC', 
      'end' => '97', 
      'start' => '81' 
     } 
    ], 
    'daughter_hash2' => [ 
     { 
      'e' => '-4.4', 
      'seq' => 'CAGT', 
      'end' => '17', 
      'start' => '6' 
     }, 
     { 
      'e' => '-4.1', 
      'seq' => 'GTT', 
      'end' => '51', 
      'start' => '26' 
     }, 
     { 
      'e' => '-4.1', 
      'seq' => 'TTG', 
      'end' => '53', 
      'start' => '28' 
     } 
    ], 
    #... 
); 
+2

試試這個:'push @ {$ _},\%new_hash for(values%mother_hash);' –

+0

謝謝,會做。 –

+0

@HåkonHægland如果您願意,請將您的評論複製並粘貼到答案中。這是一個非常優雅的答案。 –

回答

2

如果您有散列的數組哈希表,並希望在新的哈希添加到 每個陣列的結束,你可以這樣做:

push @{ $_ }, \%new_hash for (values %mother_hash); 

這個循環迭代的%mother_hash值(在這種情況下是陣列參考),併爲每次迭代設置$_。然後在每次迭代中,我們將對新散列%new_hash的引用推到該數組的末尾。

1

mother_hash是哈希陣列的哈希值。

添加另一個散列頂層數組。

%mother_hash{$key} = [ { stuff }, { stuff } ]; 

要另一個條目添加到現有的陣列

push @{%mother_hash{'key'}} { stuff }; 

要嵌入的陣列中添加其他的記錄到哈希

%{@{%mother_hash{'top_key'}}[3]}{'new_inner_key'} = value; 

當混淆並試圖匹配的「類型「的哈希/數組/標量包含散列參考/數組引用,您可以使用以下技術

use Data::Dumper; 
$Data::Dumper::Terse = 1; 
printf("mother_hash reference = %s\n", Dumper(\%mother_hash)); 
printf("mother_hash of key 'top_key' = %s\n", Dumper(%mother_hash{top_key})); 

等等,通過大型數據結構找到自己的方式,並驗證您正在縮小到您想要訪問或更改的區域。

+0

非常感謝@Edwin! –

1

首先我想指出女兒哈希不是哈希,而是匿名哈希數組。要添加另一個女兒哈希:

$mother_hash{daughter_hash3} = [ { %daughter_hash3 } ]; 

這將創建一個包含的%daughter_hash3內容的匿名散列的匿名數組。

爲一個循環:

$mother_hash{$daughter_hash_key} = [ { %daughter_hash } ]; 

其中$daughter_hash_key是一個字符串包含用於%mother_hash%daughter_hash關鍵是要增加的哈希值。

要將其他哈希添加了一個女兒陣列關鍵$daughter_hash_key

push @{ $mother_hash{$daughter_hash_key} }, { %daughter_hash }; 

我知道TI的複雜,但我建議你使用Data::Dumper每次轉儲%mother_hash內容直通環路,看它是否正常增長。

use Data::Dumper; 
print Dumper \%mother_hash; 

perldoc Data::Dumper的細節..

Data::Dumper是自帶的Perl的標準模塊。有關標準模塊的列表,請參閱perldoc perlmodlib

+0

謝謝,我明白了@Shawn! –

相關問題