2010-08-24 22 views
17

Estoy tratando de encontrar una manera de inicializar un hash sin tener que pasar por un bucle. Esperaba usar rodajas para eso, pero no parece producir los resultados esperados.¿Cómo inicializo los valores en un hash sin bucle?

Considere el siguiente código:

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

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

Esto funciona como esperan y producir el siguiente resultado:

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

Cuando intento utilizar rebanadas de la siguiente manera, que no funciona:

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

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

La salida es:

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

Obviamente hay algo mal.

Así que mi pregunta sería: ¿cuál es la forma más elegante de inicializar un hash dado dos matrices (las claves y los valores)?

Respuesta

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

Gracias - ¡perfecto! – emx

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

o

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

gracias por este ejemplo de manual de cómo inicializar un hash. Sin embargo, esto no es lo que estoy buscando. Me gustaría ver si se puede hacer con empalmes. – emx

+1

pero para el primer resultado de google, esta es una confirmación de refresco/sintaxis muy útil – lol

3

Para el primero, tratar

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

El resultado será:

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

Gracias por este ejemplo de libro de texto sobre cómo inicializar un hash. Sin embargo, esto no es lo que estoy buscando. Me gustaría ver si se puede hacer con empalmes. – emx

+0

En realidad, @emx, estaba más interesado en mostrarte por qué tu salida Data: Dumper no se veía como un hash. –

+0

Creo que quisiste votar por mí en lugar de aceptarme, pero tampoco creo que me merezco. –

13

Por lo tanto, lo que quiere decir que popular ulate el hash usando una matriz para las teclas, y una matriz para los valores. A continuación, haga lo siguiente:

#!/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);' 

da:

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

Gracias - esto es exactamente lo que estaba buscando. Es casi demasiado simple. – emx

Cuestiones relacionadas