4

我有 2 个哈希值。

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 新手,或者至少为我指明正确的方向吗?任何帮助将不胜感激。

谢谢你。

4

2 回答 2

11

预计到达时间:

啊,我想我误解了你.. 你想将两个单独的值加入一个哈希中。轻松完成map

my %hash3 = map { $hash1{$_} => $hash2{$_} } keys %hash1;
于 2012-04-16T21:05:07.393 回答
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};
}
于 2012-04-16T21:06:09.533 回答