【问题标题】:Perl: Combine hash with Keys of Keys containing identical KeyPerl:将哈希与包含相同密钥的密钥组合在一起
【发布时间】:2020-06-02 18:09:41
【问题描述】:

我正在尝试在 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}};

【问题讨论】:

    标签: perl hash hashmap key


    【解决方案1】:

    说你有

    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

    【讨论】:

    • 嗨,这是我得到的输出。我的 %h1 = ( a => 2, b => 3 );我的 %h2 = ( c => 4, d => 7 );我的 %h = ( %h1, %h2 );我的 %h = ( %{ $VAR1->{p} }, %{ $VAR2->{p} }, );警告自卸车(%h); $VAR2 = 4; $VAR3 = 'a'; $VAR4 = 2; $VAR5 = 'b'; $VAR6 = 3; $VAR7 = 'd'; $VAR8 = 7
    • 您将键和值传递给 Dumper,就像您在第三条语句中对赋值所做的那样。而且,如您所见,它们是正确的键和值。也就是说,不要将数组和哈希传递给Dumper;而是传递对它们的引用。使用Dumper(\%h),您将获得更易于阅读的内容。
    • 抱歉,输出中没有 p。 {'a' => 2, 'b' => 3, 'c' => 4, 'd' => 7}
    • 添加到我的答案中。
    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    相关资源
    最近更新 更多