繁体   English   中英

Perl:将 hash 与包含相同密钥的密钥组合

[英]Perl: Combine hash with Keys of Keys containing identical Key

我正在尝试将这些哈希图合并到 perl 中,并且当密钥相同时无法弄清楚如何去做。 所需的输入是 VAR1 和 VAR2,还提到了 output。

输入:

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


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

所需的 Output:

{'p'=> { 
        'a' => 2,
        'b' => 3,
        'c' => 4,
        'd' => 7}};

说你有

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

要将它们组合成第三个 hash,您可以使用

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

就好像你已经完成了

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

任何通用键都将从列表后面的 hash 中获取。


在您的情况下,您有匿名哈希。 因此,我们将使用%NAME的地方,我们将使用%BLOCK ,其中块返回对我们要使用的 hash 的引用。 这给了我们以下信息:

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

这也可以写成: [1]

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

最后,您还希望第二个新 hash 具有一个以p为键的元素,其值是对第一个新 hash 的引用。

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

所以,大家一起,你想要

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

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

我们也可以改用匿名 hash 构造函数 ( {} )。

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

文件:


  1. 在此处检查版本兼容性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM