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

时间:2017-08-19 12:11:21

标签: arrays perl hash perl-data-structures

如果我想使用循环向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' 
        } 
    ],
    #...
);

3 个答案:

答案 0 :(得分:2)

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

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

我知道这很复杂但我建议你每次通过循环时使用Data::Dumper转储%mother_hash的内容,看看它是否正确生长。

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

有关详细信息,请参阅perldoc Data::Dumper

Data::Dumper是Perl附带的标准模块。有关标准模块的列表,请参阅perldoc perlmodlib

答案 1 :(得分:2)

如果你有哈希数组的哈希并想要添加新哈希 每个数组的结尾,你可以这样做:

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

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

答案 2 :(得分: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}));

等等,找到通过大型数据结构的方法,并确认您正在缩小到您想要访问或更改的区域。