Perl: Обединяване на хеш елементи

Имам 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 Newbie или поне да ме насочи в правилната посока? Всяка помощ ще бъде високо оценена.

Благодаря ти.


person user1300922    schedule 16.04.2012    source източник


Отговори (1)


ETA:

А, мисля, че не те разбрах правилно... Искаше да съединиш двете отделни стойности в хеш. Прави се лесно с map:

my %hash3 = map { $hash1{$_} => $hash2{$_} } keys %hash1;
person TLP    schedule 16.04.2012
comment
Благодаря, точно от това имах нужда :) - person user1300922; 17.04.2012