我已经递归地为perl组合了一个哈希数组,看起来像这样:
[
{
'Default' => {
'Elect' => { 'P' => 1 }
}
},
{
'Default' => {
'Elect' => { 'A' => 1 }
}
},
{
'Default' => {
'Elect' => { 'M' => 1 }
}
},
{
'Default' => {
'Elect' => { 'I' => 1 }
}
},
{
'Default' => {
'Picker' => { 'L' => 1 }
}
},
]
与哈希数组相比,我的目标是使其更加精简,看起来像一个哈希。无论如何,我可以使这个哈希数组看起来像哈希:
{
'Default' =>{
'Elect' =>{
'P' => 1,
'A' => 1,
'M' => 1,
'I' => 1,
},
'Picker' => {
'L' => 1
}
}
}
答案 0 :(得分:2)
嗯,这是一个简单的递归过程来合并两个哈希引用:
sub merge {
my ($xs, $ys) = @_;
while (my ($k, $v) = each %$ys) {
if ('HASH' eq ref $v) {
merge($xs->{$k} //= {}, $v);
}
else {
$xs->{$k} = $v;
}
}
}
然后:
my $data = ...; # your input data structure
my $acc = {};
merge($acc, $_) for @$data;
在$acc
生成您想要的结果。
还有Hash::Merge
模块,其中包含:
use Hash::Merge 'merge';
my $acc = {};
$acc = merge $acc, $_ for @$data;