如何将新哈希附加到哈希数组?
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
的引用推到该数组的末尾。
如果我想使用循环将新散列添加到 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
的引用推到该数组的末尾。