如何将新哈希附加到哈希数组?

How do I append a new hash to an array of hashes?

如果我想使用循环将新散列添加到 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' 
        } 
    ],
    #...
);

mother_hash 是哈希数组的哈希。

添加另一个顶级哈希数组。

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

向现有数组添加另一个条目

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

向嵌入数组中的散列添加另一个条目

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

当混淆并试图匹配包含散列引用/数组引用的散列/数组/标量的 "types" 时,您可以使用以下技术

 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}));

等等,通过大型数据结构找到您的方式,并验证您是否正在缩小到您想要访问或更改的区域。

首先我要指出子散列不是散列而是匿名散列的数组。添加另一个女儿哈希:

$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

如果你有一个散列数组的散列并且想要添加一个新的散列到 每个数组的末尾,你可以这样做:

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

此循环遍历 %mother_hash 的值(在本例中为数组引用)并为每次迭代设置 $_。然后在每次迭代中,我们将对新散列 %new_hash 的引用推到该数组的末尾。