2010-02-21 11 views

risposta

23

è così semplice come

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

Ottimo! Ho dimenticato la soluzione fetta, anche se la uso regolarmente. – codeholic

+0

Grazie! Mi chiedo perché non sia nei libri (quelli che leggo). – Temujin

+0

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

2

Se ho ben capito il problema in modo corretto:

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

mi piace molto Perl, ma a volte uno può disperare su un linguaggio di programmazione che ti permette di avere più caratteri non lettera rispetto alle lettere nel tuo codice sorgente ... – Boldewyn

+2

@Boldewyn: di solito risolto usando nomi di variabili reali – ysth

0

a sono le chiavi, B sono i valori di hash C:

use strict; 
use warnings; 

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

Tenete a mente che non ci devono essere i valori duplicati in la matrice A.

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

Ecco come è fatto internamente (se sei sicuro circa uguale numero di elementi):

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

Bello, non avevo pensato di usare la mappa. –

+0

o tira il tuo: 'sottostringa {@_ [mappa $ _ & 1? $ _ >> 1: ($ _ >> 1) + ($ # _ >> 1), 1 .. @ _]} ' – ysth

Problemi correlati