Perl:合并哈希元素

4

我有两个哈希表。

my %hash1 = (
          '1.3.6.1.2.1.7.1.0' => 'switch_stuff1',
          '1.3.6.1.2.1.6.3.0' => 'switch_stuff4',
          '1.3.6.1.2.1.6.5.0' => 'switch_stuff5',
          '1.3.6.1.2.1.7.4.0' => 'switch_stuff2',
          '1.3.6.1.2.1.6.2.0' => 'switch_stuff3'
    );

my %hash2 = (
          '1.3.6.1.2.1.7.1.0' => 125858,
          '1.3.6.1.2.1.6.3.0' => 120000,
          '1.3.6.1.2.1.6.5.0' => 23766,
          '1.3.6.1.2.1.7.4.0' => 115336,
          '1.3.6.1.2.1.6.2.0' => 200
     );

正如您所见,两个哈希表的键值相同。

我需要做的是从%hash1中取出并将其用作%hash2

输出:

$VAR1 = {
          'switch_stuff1' => 125858,
          'switch_stuff4' => 120000,
          'switch_stuff5' => 23766,
          'switch_stuff2' => 115336,
          'switch_stuff3' => 200
        };

注意:两个哈希表中的键值对数量始终相同。

或者说,对我来说唯一重要的是%hash1中的值。

'switch_stuff1',
'switch_stuff4',
'switch_stuff5',
'switch_stuff2',
'switch_stuff3'

如果按照我描述的方式合并哈希表不可行,那么我可以将%hash1转换为仅包含值的数组。

有人能帮助Perl新手吗,或者至少指导一下方向?非常感谢任何帮助。

谢谢。

2个回答

11

更新:

啊,我误解了你的意思... 你想将两个独立的值连接成一个哈希表。这可以很容易地通过使用map实现:

my %hash3 = map { $hash1{$_} => $hash2{$_} } keys %hash1;

5
my $hash1 = {
          '1.3.6.1.2.1.7.1.0' => 'switch_stuff1',
          '1.3.6.1.2.1.6.3.0' => 'switch_stuff4',
          '1.3.6.1.2.1.6.5.0' => 'switch_stuff5',
          '1.3.6.1.2.1.7.4.0' => 'switch_stuff2',
          '1.3.6.1.2.1.6.2.0' => 'switch_stuff3'
};

my $hash2 = {
          '1.3.6.1.2.1.7.1.0' => 125858,
          '1.3.6.1.2.1.6.3.0' => 120000,
          '1.3.6.1.2.1.6.5.0' => 23766,
          '1.3.6.1.2.1.7.4.0' => 115336,
          '1.3.6.1.2.1.6.2.0' => 200
};  

my $hash3 = {}:

foreach $key (keys %$hash1) {
   $hash3->{$hash1->{$key}} = $hash2->{$key};
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接