2012-04-16 135 views
4

我有2个哈希。Perl:合并哈希元素

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

谢谢。

回答

10

ETA:

嗯,我想我误解你了。你想加入两个单独的值转换成哈希值。与map容易实现:

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

谢谢你,这正是我需要的:) – user1300922 2012-04-17 14:21:29

+0

@ user1300922不客气。 – TLP 2012-04-17 14:24:29

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}; 
}