2012-04-16 1 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

+0

@ user1300922 Добро пожаловать. – TLP

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