如果我想使用循环向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'
}
],
#...
);
答案 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}));
等等,找到通过大型数据结构的方法,并确认您正在缩小到您想要访问或更改的区域。