Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
Guida alla programmazione in Perl: gli hash (2/3)
Scritto da Alessandro Piccarolo il 26-03-2010 ore 06:19
Intel Parallel Studio XE
Una volta creato un hash, la sintassi da utilizzare per accedere a uno dei suoi elementi è la seguente:
  1. $hash{key}
Il simbolo del dollaro ($) prima di hash indica il fatto che di tutto l’hash si vuole estrarre solamente uno scalare (analogamente a quando si accede a un elemento di un array), mentre le parentesi graffe intorno a key indicano che il valore dell’hash deve essere associato a questa chiave specifica. Ad esempio:
  1. %myHash = (cane => ‘Pluto’,
  2.            topo => ‘Topolino’,
  3.            cavallo => ‘Orazio’);
  4. print $myHash{cane};            # stampa ‘Pluto’
È anche possibile estrarre in una sola volta i valori corrispondenti a più di una chiave, come nell’esempio seguente:
  1. %myHash = (cane => 'Pluto',
  2.            topo => 'Topolino',
  3.            cavallo => 'Orazio');
  4. @subset = @myHash{cane, topo};  # subset contiene ‘Pluto’ e ‘Topolino’
Si noti come in questo caso si sia utilizzato l’identificatore di tipo @, poiché di fatto si sta lavorando in un contesto di lista. Sovente è necessario esaminare tutti gli elementi di un hash. Se tutte le chiavi che lo compongono sono note, allora si può accedere a ogni singolo valore utilizzando la relativa chiave come indicato in precedenza. Se invece (come è prassi) le chiavi non sono note si può ricorrere alla funzione keys, che restituisce una lista contenente tutte le chiavi definite per un dato hash.

Si noti che la funzione keys non restituisce le chiavi in un particolare ordine, poiché esse non sono memorizzate internamente (e quindi restituite) secondo un ordine casuale (comportamento garantito a partire dalla versione Perl 5.8 in poi). L’esempio seguente mostra un impiego della funzione keys, utilizzando il costrutto foreach:
  1. %myHash = (cane => 'Pluto',
  2.            topo => 'Topolino',
  3.            cavallo => 'Orazio');
  4. foreach $animale (keys %myHash)
  5. {
  6.   print “il $animale si chiama $myHash{$animale}\n”;
  7. }
Se usata in un contesto scalare, la funzione keys restituisce il numero di chiavi presenti nell’hash specificato. Se invece occorre conoscere tutti i valori presenti in un hash, allora è possibile utilizzare la funzione values, che restituisce una lista contenente tutti i valori definiti per un dato hash.

La funzione values rappresenta un metodo efficiente per recuperare tutti i valori, purché non sia necessario conoscere la chiave associata a un dato valore, in quanto questa informazione non è restituita dalla funzione values (l’hash lavora sulla relazione chiave-valore, non viceversa):
  1. %myHash = (cane => 'Pluto',
  2.            topo => 'Topolino',
  3.            cavallo => 'Orazio');
  4. foreach $animale (values %myHash)
  5. {
  6.   print “nome: $animale\n”;
  7. }
Se usata in un contesto scalare, la funzione values restituisce il numero di chiavi presenti nell’hash specificato. Si osservi inoltre che poiché i valori possono non essere univoci (a differenza delle chiavi), la funzione values può restituire lo stesso valore più di una volta:
  1. %myHash = (cane => 'Pluto',
  2.            topo1 => 'Topolino',
  3.            topo2 => 'Topolino',
  4.            cavallo => 'Orazio');
  5. foreach $animale (values %myHash)
  6. {
  7.   print “nome: $animale\n”;
  8. }
Precedente: Ripensare i sistemi operativi per adattarli ai processori multicore
Successiva: Retrocomputing e archeologia informatica: l'hardware (4/6)
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.256 secondi.