Perl。将包含相同Key的Key与Key的Key进行组合。

问题描述 投票:0回答:1

我试图用perl合并这些hashmaps,但在密钥相同的情况下,无法弄清楚如何做到这一点。需要的输入是VAR1和VAR2,输出也提到了。

输入:VAR1和VAR2,输出也提到了。

my $VAR1 = { 'p'=> { 'a' => 2,
                     'b' => 3}};


my $VAR2 = { 'p'=> { 'c' => 4,
                     'd' => 7}};

希望的输出:

{'p'=> { 
        'a' => 2,
        'b' => 3,
        'c' => 4,
        'd' => 7}};
perl hash hashmap key
1个回答
3
投票

说你有

my %h1 = ( a => 2, b => 3 );
my %h2 = ( c => 4, d => 7 );

要将它们合并成第三个哈希,你可以使用

my %h = ( %h1, %h2 );

这就好像你做了

my %h = ( a => 2, b => 3, c => 4, d => 7 );

任何共同的键都将从列表中后面的哈希中提取。


在你的情况下,你有匿名的哈希值。所以我们本来会使用 %NAME,我们将使用 %BLOCK,其中块返回一个我们想要使用的哈希的引用。这就得到了下面的内容。

my %h_inner = (
   %{ $VAR1->{p} },
   %{ $VAR2->{p} },
);

这也可以写成如下:[1]

my %h_inner = (
   $VAR1->{p}->%*,
   $VAR2->{p}->%*,
);

最后,你还想用一个键入为 p 其值是对这第一个新哈希的引用。

my %h_outer = ( p => \%h_inner );

所以,总的来说,你想要

my %h_inner = (
   %{ $VAR1->{p} },
   %{ $VAR2->{p} },
);

my %h_outer = ( p => \%h_inner );

我们也可以使用匿名哈希构造函数({})代替。

my %h_outer = (
   p => {
      %{ $VAR1->{p} },
      %{ $VAR2->{p} },
   },
};

文档。


  1. 检查版本兼容性 此处.
© www.soinside.com 2019 - 2024. All rights reserved.