散列合并/连接

Mah*_*lab 5 perl hash merge concatenation

这是我的哈希转储:%hash1

$VAR1 = {
    abc => {
        123 => [
          'xx',
          'yy',
          'zy'
        ],
        456 => [
          'ab',
          'cd',
          'ef'
        ]
    }
};
Run Code Online (Sandbox Code Playgroud)

第二个:%hash2

$VAR2 = { 
    def => {
        659 => [
            'wx',
            'yg',
            'kl'
        ],
        456 => [
            'as',
            'sd',
            'df'
        ]
    },
    abc => {
        987 => [
            'lk',
            'dm',
            'sd'
        ]
    }
};
Run Code Online (Sandbox Code Playgroud)

现在我想在新哈希中合并这两个哈希,但是如果一个键是重复的(这里是'abc'),那么值应该被追加,而不是替换,所以键应该保持唯一,并且所有的值都应该保留为好.如何在Perl中完成?输出应如下:

$VAR1 = {
    def => {
        659 => [
            'wx',
            'yg',
            'kl'
        ],
        456 => [
            'as',
            'sd',
            'df'
        ]
    },
    abc => {
        987 => [
            'lk',
            'dm',
            'sd'
        ],
        123 => [
            'xx',
            'yy',
            'zy'
        ],
        456 => [
            'ab',
            'cd',
            'ef'
        ]
    }
 };
Run Code Online (Sandbox Code Playgroud)

PSI*_*Alt 7

使用CPAN模块Hash::MergeHash::Merge::Simple.第一个是高度可配置的,第二个是非常简单易用的.


ike*_*ami 4

for my $x (keys(%h2)) {
    for my $y (keys(%{ $h2{$x} })) {
        push @{ $h1{$x}{$y} }, @{ $h2{$x}{$y} };
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Dheeraj,当然是最后。由于我要合并到 `%h1`,所以它将是 `print(Dumper(\%h1));` (2认同)