Gli array scalari, come abbiamo visto, possono essere utili per
molti compiti, ma hanno un difetto: una volta inserito un dato nellarray,
occorre sapere il suo indice per ritrovarlo. Senza indice, il dato
è virtualmente perso (ci sono eccezioni, ma qui non ci riguardano).
Gli array associativi risolvono questo problema, assegnando
ad ogni dato non un indice numerico progressivo, ma una chiave,
in genere una stringa. Il dato poi può essere ritrovato usando la
chiave. Ad esempio:
%stipendi = ();
$stipendi{Mario Rossi} = 1000;
$stipendi{Marco Verdi} = 2000;
Abbiamo qui ancora un altro simbolo, %, per indicare
gli array associativi. Come prima, definiamo larray %stipendi
dandogli una lista vuota. Però, per accedere ai singoli elementi
usiamo una chiave, messa tra parentesi graffe (nel caso non abbiate
le parentesi graffe sulla vostra tastiera, potete farle tenendo
premuto il tasto ALT e digitando 123 oppure 125 sul vostro tastierino
numerico).
In questo modo, per conoscere lo stipendio di un dipendente basta
avere il suo nome.
Da notare che ad ogni chiave è associato uno ed un solo valore,
ma lo stesso valore può essere associato a più chiavi; questo concetto
è nella definizione propria di chiave. In pratica quindi se si hanno
due chiavi diverse, i due valori corrispondenti associati possono
essere o meno diversi, se invece si hanno due chiavi uguali i loro
valori associati sono sicuramente uguali.
Gli array associativi sono utilissimi per organizzare le informazioni
in modo logico. Mettiamo che, a scuola, vi abbiano dato come compito
da svolgere a casa di fare un po di analisi statistiche sulle
altezze dei vostri compagni di classe. Ok, difficilmente troveremo
un quattordicenne in grado fare il tutto in Perl, ma immedesimatevi
nella situazione.
Riempire un array associativo
Iniziamo il nostro programma fornendo i nomi dei ragazzi e le loro
altezze. Per semplificare, mi limiterò ad una classe di 4 componenti
(magari il nostro sistema scolastico se lo potesse permettere!).
Per riempire larray, abbiamo più di un modo di farlo. Il più
diretto è quello di dare le coppie chiave-valore una alla volta:
%altezza = ();
$altezza{Marco} = 168;
$altezza{Mario} = 179;
$altezza{Luisa} = 163;
$altezza{Elena} = 167;
In questo modo il nostro array contiene quattro chiavi, ad ognuna
delle quali è associato un valore. Lassegnazione iniziale
svuota larray di un eventuale precedente contenuto (se siamo
allinizio di un programma non ci dovrebbe essere niente, ma
è sempre meglio essere cauti).
La stessa operazione può essere scritta in modo più compatto:
%altezza = (Marco, 168, Mario, 179, Luisa,
163, Elena, 167);
In questaltro modo mettiamo le coppie in una lista. Il Perl
vede che a sinistra delluguale cè un array associativo,
e spezza la lista in coppie chiave-valore. Fate attenzione a non
usare un array normale (@)! Non funzionerebbe niente.
Da notare che assegnando direttamente una lista, non occorre svuotare
larray prima: dando una lista specifichiamo lintero
array.
Cè un terzo modo, più chiaro:
%altezza = (
Marco => 168,
Mario => 179,
Luisa => 163,
Elena => 167,
);
Qui abbiamo usato loperatore =>, che è semplicemente
un sostituto della virgola, solo che permette di organizzare visualmente
le cose in blocchi logici. Notate che dopo lultimo
valore, ho lasciato una virgola. In linguaggi più pignoli, questo
sarebbe un errore, perché dopo la virgola cè la parentesi
di chiusura della lista. Il Perl è comunque coerente con se stesso:
dopo la virgola cè
niente, quindi non aggiunge niente alla lista, poi trova la parentesi
che la termina e considera la lista finita. In definitiva, la virgola
è ininfluente. Ma può fare molta differenza quando andate ad aggiungere
altri valori oltre a quelli già scritti, e potreste fare questo
errore:
%altezza = (
Marco => 168,
Mario => 179,
Luisa => 163,
Elena => 167
Paolo => 162,
);
Anche se a voi tutto sembra ben separato, in realtà tra il 167
di Elena e il nome di Paolo cè solo un ritorno a capo, che
dal punto di vista sintattico non basta a separare le cose. Quindi,
usate sempre le virgole, e sarete al sicuro.
Termina qui la prima lezione sugli array associativi. Conservate
il programma che stiamo scrivendo, perché servirà anche nella prossima
lezione.
Torna all'indice Generale del corso di Corso di Perl di Software Planet