Perl:将散列与包含相同Key的Keys Keys组合

时间:2020-06-02 18:09:41

标签: perl hash hashmap key

我试图将这些哈希图合并到perl中,但是当键相同时却无法弄清楚该如何做。所需的输入是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}};

1 个答案:

答案 0 :(得分: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. 检查版本兼容性here