Perl - Hashes

Ein Hash ist eine Menge von key/valuePaare. Vor Hash-Variablen steht ein Prozentzeichen (%). Um auf ein einzelnes Element eines Hash zu verweisen, verwenden Sie den Namen der Hash-Variablen, dem ein "$" -Zeichen vorangestellt ist, gefolgt von dem "Schlüssel", der dem Wert in geschweiften Klammern zugeordnet ist.

Hier ist ein einfaches Beispiel für die Verwendung der Hash-Variablen:

#!/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";

Dies führt zu folgendem Ergebnis:

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

Hashes erstellen

Hashes werden auf eine der beiden folgenden Arten erstellt. Bei der ersten Methode weisen Sie einem benannten Schlüssel einzeln einen Wert zu -

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

Im zweiten Fall verwenden Sie eine Liste, die konvertiert wird, indem einzelne Paare aus der Liste entnommen werden: Das erste Element des Paares wird als Schlüssel und das zweite als Wert verwendet. Zum Beispiel -

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

Aus Gründen der Übersichtlichkeit können Sie => als Alias ​​für verwenden, um die Schlüssel / Wert-Paare wie folgt anzugeben:

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

Hier ist eine weitere Variante des obigen Formulars. Sehen Sie es sich an. Hier wurde allen Schlüsseln ein Bindestrich (-) vorangestellt, und um sie herum ist kein Zitat erforderlich.

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

Es ist jedoch wichtig zu beachten, dass es ein einziges Wort gibt, dh ohne Leerzeichen wurden Schlüssel in dieser Form der Hash-Bildung verwendet. Wenn Sie Ihren Hash auf diese Weise aufbauen, wird auf Schlüssel nur mit Bindestrich zugegriffen, wie unten gezeigt.

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

Zugriff auf Hash-Elemente

Wenn Sie über einen Hash auf einzelne Elemente zugreifen, müssen Sie der Variablen ein Dollarzeichen ($) voranstellen und dann den Elementschlüssel in geschweiften Klammern nach dem Namen der Variablen anhängen. Zum Beispiel -

#!/usr/bin/perl

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

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

Dies führt zu folgendem Ergebnis:

45
30
40

Scheiben extrahieren

Sie können Slices eines Hash genauso extrahieren wie Slices aus einem Array. Sie müssen das Präfix @ für die Variable verwenden, um den zurückgegebenen Wert zu speichern, da es sich um eine Liste von Werten handelt.

#!/uer/bin/perl


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

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

print "Array : @array\n";

Dies führt zu folgendem Ergebnis:

Array : 45 30

Schlüssel und Werte extrahieren

Mit können Sie eine Liste aller Schlüssel aus einem Hash abrufen keys Funktion, die die folgende Syntax hat -

keys %HASH

Diese Funktion gibt ein Array aller Schlüssel des genannten Hash zurück. Es folgt das Beispiel -

#!/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";

Dies führt zu folgendem Ergebnis:

Lisa
John Paul
Kumar

Ebenso können Sie verwenden valuesFunktion, um eine Liste aller Werte zu erhalten. Diese Funktion hat die folgende Syntax:

values %HASH

Diese Funktion gibt ein normales Array zurück, das aus allen Werten des benannten Hash besteht. Es folgt das Beispiel -

#!/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";

Dies führt zu folgendem Ergebnis:

30
45
40

Auf Existenz prüfen

Wenn Sie versuchen, über einen nicht vorhandenen Hash auf ein Schlüssel / Wert-Paar zuzugreifen, erhalten Sie normalerweise das undefinedWenn Sie Warnungen aktiviert haben, wird zur Laufzeit eine Warnung generiert. Sie können dies umgehen, indem Sie dieexists Funktion, die true zurückgibt, wenn der benannte Schlüssel vorhanden ist, unabhängig davon, welchen Wert er haben könnte -

#!/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";
}

Hier haben wir die IF ... ELSE-Anweisung eingeführt, die wir in einem separaten Kapitel untersuchen werden. Im Moment nehmen Sie das einfach anif( condition ) Teil wird nur ausgeführt, wenn die gegebene Bedingung andernfalls wahr ist elseTeil wird ausgeführt. Wenn wir also das obige Programm ausführen, wird das folgende Ergebnis erzeugt, da hier die gegebene Bedingung vorliegt ($ data {'Lisa'} gibt true zurück -

Lisa is 30 years old

Hash-Größe abrufen

Sie können die Größe ermitteln, dh die Anzahl der Elemente aus einem Hash, indem Sie den skalaren Kontext für Schlüssel oder Werte verwenden. Sagen Sie einfach zuerst, dass Sie ein Array mit den Schlüsseln oder Werten erhalten müssen, und dann können Sie die Größe des Arrays wie folgt ermitteln:

#!/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";

Dies führt zu folgendem Ergebnis:

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

Hinzufügen und Entfernen von Elementen in Hashes

Das Hinzufügen eines neuen Schlüssel / Wert-Paares kann mit einer Codezeile unter Verwendung eines einfachen Zuweisungsoperators erfolgen. Um ein Element aus dem Hash zu entfernen, müssen Sie es verwendendelete Funktion wie unten im Beispiel gezeigt -

#!/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";

Dies führt zu folgendem Ergebnis:

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