2010-02-21 26 views

Respuesta

23

es tan simple como

my %c; 
@c{@a} = @b; 
+0

¡Genial! Me olvidé de la solución de corte, aunque la uso regularmente. – codeholic

+0

Gracias! Me pregunto por qué no está en los libros (los que leo). – Temujin

+0

http://perldoc.perl.org/perldata.html#Slices – toolic

2

Si entiendo correctamente el problema:

my %c; 
$c{$a[$_]} = $b[$_] for (0 .. @a-1); 
+0

me gusta mucho Perl, pero a veces uno puede desesperar en un lenguaje de programación que le permite obtener más letras que no sean letras en su código fuente ... – Boldewyn

+2

@Boldewyn: generalmente se fija usando nombres de variables reales – ysth

0

A son las claves, B son los valores de hash de C:

use strict; 
use warnings; 

my @a = 1 .. 3; 
my @b = 4 .. 6; 
my %c; 
for (0 .. $#a) { 
    $c{$a[$_]} = $b[$_] 
} 

Tenga en cuenta que no debe haber ningún valores duplicados en la matriz A

8
use List::MoreUtils 'mesh'; 
my %c = mesh @a, @b; 

Eso es cómo se hace internamente (si está seguro sobre el mismo número de elementos):

my %c = map { $a[$_] => $b[$_] } 0 .. $#a; 
+0

Bueno, no lo tenía pensado en usar el mapa. –

+0

o hazlo tu mismo: 'sub mesh {@_ [map $ _ & 1? $ _ >> 1: ($ _ >> 1) + ($ # _ >> 1), 1 .. @ _]} ' – ysth

Cuestiones relacionadas