Perl - Hash

Un hash è un insieme di file key/valuecoppie. Le variabili hash sono precedute da un segno di percentuale (%). Per fare riferimento a un singolo elemento di un hash, utilizzerai il nome della variabile hash preceduto da un segno "$" e seguito dalla "chiave" associata al valore tra parentesi graffe ..

Ecco un semplice esempio di utilizzo delle variabili hash:

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'} = $data{'John Paul'}\n";
print "\$data{'Lisa'} = $data{'Lisa'}\n";
print "\$data{'Kumar'} = $data{'Kumar'}\n";

Questo produrrà il seguente risultato:

$data{'John Paul'} = 45
$data{'Lisa'} = 30
$data{'Kumar'} = 40

Creazione di hash

Gli hash vengono creati in uno dei due modi seguenti. Nel primo metodo, si assegna un valore a una chiave denominata uno per uno:

$data{'John Paul'} = 45;
$data{'Lisa'} = 30;
$data{'Kumar'} = 40;

Nel secondo caso si utilizza una lista, che viene convertita prelevando singole coppie dalla lista: il primo elemento della coppia viene utilizzato come chiave e il secondo come valore. Ad esempio:

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

Per chiarezza, puoi usare => come alias per, per indicare le coppie chiave / valore come segue:

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

Ecco un'altra variante del modulo sopra, dai un'occhiata, qui tutte le chiavi sono state precedute da un trattino (-) e non è richiesta alcuna citazione intorno ad esse -

%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

Ma è importante notare che c'è una sola parola, cioè senza spazi le chiavi sono state usate in questa forma di formazione di hash e se si crea l'hash in questo modo, si accederà alle chiavi usando il trattino solo come mostrato di seguito.

$val = %data{-JohnPaul}
$val = %data{-Lisa}

Accesso agli elementi hash

Quando si accede a singoli elementi da un hash, è necessario anteporre alla variabile un segno di dollaro ($) e quindi aggiungere la chiave dell'elemento tra parentesi graffe dopo il nome della variabile. Ad esempio:

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

print "$data{'John Paul'}\n";
print "$data{'Lisa'}\n";
print "$data{'Kumar'}\n";

Questo produrrà il seguente risultato:

45
30
40

Estrazione di fette

Puoi estrarre fette di un hash proprio come puoi estrarre fette da un array. Sarà necessario utilizzare il prefisso @ per la variabile per memorizzare il valore restituito perché sarà un elenco di valori -

#!/uer/bin/perl


%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

@array = @data{-JohnPaul, -Lisa};

print "Array : @array\n";

Questo produrrà il seguente risultato:

Array : 45 30

Estrazione di chiavi e valori

È possibile ottenere un elenco di tutte le chiavi da un hash utilizzando keys funzione, che ha la seguente sintassi:

keys %HASH

Questa funzione restituisce un array di tutte le chiavi dell'hash denominato. Di seguito è riportato l'esempio:

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@names = keys %data;

print "$names[0]\n";
print "$names[1]\n";
print "$names[2]\n";

Questo produrrà il seguente risultato:

Lisa
John Paul
Kumar

Allo stesso modo, puoi usare valuesfunzione per ottenere un elenco di tutti i valori. Questa funzione ha la seguente sintassi:

values %HASH

Questa funzione restituisce un normale array costituito da tutti i valori dell'hash denominato. Di seguito è riportato l'esempio:

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@ages = values %data;

print "$ages[0]\n";
print "$ages[1]\n";
print "$ages[2]\n";

Questo produrrà il seguente risultato:

30
45
40

Controllo dell'esistenza

Se provi ad accedere a una coppia chiave / valore da un hash che non esiste, normalmente otterrai l'estensione undefinedvalore e se hai attivato gli avvisi, riceverai un avviso generato in fase di esecuzione. Puoi aggirare questo problema usando ilexists funzione, che restituisce true se la chiave denominata esiste, indipendentemente da quale potrebbe essere il suo valore -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

if( exists($data{'Lisa'} ) ) {
   print "Lisa is $data{'Lisa'} years old\n";
} else {
   print "I don't know age of Lisa\n";
}

Qui abbiamo introdotto l'affermazione IF ... ELSE, che studieremo in un capitolo separato. Per ora lo presumiif( condition ) parte verrà eseguita solo quando la condizione data è vera altrimenti elseparte verrà eseguita. Quindi, quando eseguiamo il programma sopra, produce il seguente risultato perché qui esiste la condizione data ($ data {'Lisa'} restituisce true -

Lisa is 30 years old

Ottenere dimensioni hash

È possibile ottenere la dimensione, ovvero il numero di elementi da un hash, utilizzando il contesto scalare su chiavi o valori. Semplicemente dicendo prima devi ottenere un array di chiavi o valori e quindi puoi ottenere la dimensione dell'array come segue:

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

@values = values %data;
$size = @values;
print "2 - Hash size:  is $size\n";

Questo produrrà il seguente risultato:

1 - Hash size: is 3
2 - Hash size: is 3

Aggiungi e rimuovi elementi negli hash

L'aggiunta di una nuova coppia chiave / valore può essere eseguita con una riga di codice utilizzando un semplice operatore di assegnazione. Ma per rimuovere un elemento dall'hash è necessario utilizzaredelete funziona come mostrato di seguito nell'esempio:

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

# adding an element to the hash;
$data{'Ali'} = 55;
@keys = keys %data;
$size = @keys;
print "2 - Hash size:  is $size\n";

# delete the same element from the hash;
delete $data{'Ali'};
@keys = keys %data;
$size = @keys;
print "3 - Hash size:  is $size\n";

Questo produrrà il seguente risultato:

1 - Hash size: is 3
2 - Hash size: is 4
3 - Hash size: is 3