2010-08-24 11 views
17

J'essaie de trouver un moyen d'initialiser un hachage sans avoir à passer par une boucle. J'espérais utiliser des tranches pour cela, mais cela ne semble pas produire les résultats attendus.Comment initialiser des valeurs dans un hachage sans boucle?

Consultez le code suivant:

#!/usr/bin/perl 
use Data::Dumper; 

my %hash =(); 
$hash{currency_symbol} = 'BRL'; 
$hash{currency_name} = 'Real'; 
print Dumper(%hash); 

Cela fonctionne comme attendre et produire la sortie suivante:

$VAR1 = 'currency_symbol'; 
$VAR2 = 'BRL'; 
$VAR3 = 'currency_name'; 
$VAR4 = 'Real'; 

Lorsque je tente d'utiliser des tranches comme suit, il ne fonctionne pas:

#!/usr/bin/perl 
use Data::Dumper; 

my %hash =(); 
my @fields = ('currency_symbol', 'currency_name'); 
my @array = ('BRL','Real'); 
@hash{@array} = @fields x @array; 

La sortie est la suivante:

$VAR1 = 'currency_symbol'; 
$VAR2 = '22'; 
$VAR3 = 'currency_name'; 
$VAR4 = undef; 

Il y a évidemment quelque chose qui ne va pas. Donc, ma question serait: quelle est la façon la plus élégante d'initialiser un hachage donné deux tableaux (les clés et les valeurs)?

Répondre

23
use strict; 
use warnings; # Must-haves 

# ... Initialize your arrays 

my @fields = ('currency_symbol', 'currency_name'); 
my @array = ('BRL','Real'); 

# ... Assign to your hash 

my %hash; 
@hash{@fields} = @array; 
+0

Merci - parfait! – emx

6
%hash = ('current_symbol' => 'BLR', 'currency_name' => 'Real'); 

ou

my %hash =(); 
my @fields = ('currency_symbol', 'currency_name'); 
my @array = ('BRL','Real'); 
@hash{@fields} = @array x @fields; 
+0

Merci pour cet exemple de manuel sur la façon d'initialiser un hachage. Cependant, ce n'est pas ce que je cherche. Je voudrais voir si cela peut être fait avec des épissures. – emx

+1

mais pour le premier résultat google, ceci est une confirmation de mise à jour/syntaxe très utile – lol

3

Pour le premier, essayez

my %hash = 
("currency_symbol" => "BRL", 
    "currency_name" => "Real" 
); 
print Dumper(\%hash); 

Le résultat sera:

$VAR1 = { 
      'currency_symbol' => 'BRL', 
      'currency_name' => 'Real' 
     }; 
+0

Merci pour cet exemple de manuel sur la façon d'initialiser un hachage. Cependant, ce n'est pas ce que je cherche. Je voudrais voir si cela peut être fait avec des épissures. – emx

+0

En fait @emx, j'étais plus préoccupé de vous montrer pourquoi votre sortie Data: Dumper ne ressemblait pas à un hachage. –

+0

Je pense que vous vouliez me rejeter plutôt que de m'accepter, mais je ne pense pas que je le mérite non plus. –

13

Alors, ce que vous voulez est de pop ulate le hash en utilisant un tableau pour les clés, et un tableau pour les valeurs. Ensuite, procédez comme suit:

#!/usr/bin/perl 
use strict; 
use warnings; 

use Data::Dumper; 

my %hash; 

my @keys = ("a","b"); 
my @values = ("1","2"); 

@hash{@keys} = @values; 

print Dumper(\%hash);' 

donne:

$VAR1 = { 
      'a' => '1', 
      'b' => '2' 
     }; 
+0

Merci - c'est exactement ce que je cherchais. C'est presque trop simple. – emx

Questions connexes