Categories Programmierung

Verwendung assoziativer Arrays in der Perl-Programmierung: Wie man einen Hash in einer Perl-Anwendung verwendet

CAPTCHA
Photo by markusspiske on Unsplash

Das assoziative Array (oder Hash) von Perl erlaubt es dem Programmierer, eine Zeichenkette als Index für ein Array zu verwenden, anstatt eine Zahl.

 

Arrays sind nützliche Datenstrukturen in jeder Programmiersprache, und in Programmiersprachen wie Perl ist es besonders einfach, mit ihnen zu arbeiten. Allerdings gibt es bei den traditionellen Arrays Einschränkungen. Sie eignen sich für geordnete Daten (z. B. die Tage der Woche oder die Monate des Jahres), aber es kann Probleme geben, wenn die Daten keine solche definierte Ordnung haben (z. B. ein Array mit physikalischen Konstanten).

In dieser Situation muss sich der Programmierer verschiedene Lösungen für die Organisation der Daten einfallen lassen. Glücklicherweise gibt es für den Perl-Programmierer eine einfache Lösung, nämlich assoziative Arrays.

Wechsel von Arrays zu assoziativen Arrays

Bevor wir uns mit assoziativen Arrays (oder Hashes) beschäftigen, lohnt es sich, einen Blick auf gewöhnliche Arrays zu werfen. Nehmen wir zum Beispiel ein Array, das die Tage der Woche enthält:

@days = (‚Junk‘, ‚Sunday‘, ‚Monday‘, ‚Tuesday‘, ‚Wednesday‘, ‚Thurday‘,’Friday‘,’Saturday‘);

In diesem Beispiel ist ‚Junk‘ kein tatsächlicher Wochentag. Er wurde so eingefügt, dass ‚Sunday‘ die Indexnummer 1 hat (alle Perl-Arrays beginnen mit einer Indexnummer von 0). Die Reihenfolge der Woche ist dann ziemlich offensichtlich und leicht zugänglich, zum Beispiel:

print $days[2];

würde wie erwartet „Montag“ ausgeben. Allerdings haben nicht alle Listen eine so offensichtliche Struktur. Nehmen wir zum Beispiel ein Array, das die Massen von Elektronen, Neutronen und Protonen enthält:

 

@massen = (1,6726 * 10 ** -27, 1,649 * 10 ** -27, 9,1094 * 10 ** -31);

Die offensichtliche Frage an diesem Punkt ist: Was ist was? Ist die Reihenfolge tatsächlich Elektron-> Neutron-> Proton oder eine andere Reihenfolge? Es gibt keine offensichtliche Möglichkeit, dies festzustellen. Der Programmierer könnte natürlich ein zweites Array erstellen, das die richtige Reihenfolge enthält:

@particle = (‚Proton‘, ‚Neutron‘, ‚Elektron‘);

Sie müssten dann mit Hilfe des zweiten Arrays den entsprechenden Wert aus dem ersten heraussuchen:

Teilmasse {

for (my $i=0; $i<@particle; $i++) {

if ($_[0] eq $particle[$i]) {Rückgabe $masses[$i]}

}

}

print mass(’neutron‘) . „\n“;

Und obwohl dies effektiv funktioniert, ist es viel einfacher, assoziative Arrays zu verwenden, da jeder Wert mit einer Zeichenkette verknüpft ist.

Erstellen eines assoziativen Arrays mit Perl

Ein assoziatives Array in Perl wird durch das Präfix % (Prozent) gekennzeichnet, und sein Inhalt besteht aus einer Reihe von Bezeichnern und zugehörigen Werten:

%physikalische_Konstanten = (

Lichtgeschwindigkeit‘ => 2,997925 * 10 ** 8,

Masse eines Protons‘ => 1,6726 * 10 ** -27,

Masse eines Neutrons‘ => 1,649 * 10 ** -27,

Masse eines Elektrons‘ => 9,1094 * 10 ** -31,

Ladung eines Protons‘ => 1,6022 * 10 ** -19,

Universelle Gravitationskonstante‘ => 6,6726 * 10 ** -11,

Gravitationsbeschleunigung auf der Erde‘ => 9,80665,

Planck-Konstante“ => 6,6022 * 10 ** -34

);

Der Programmierer muss nun nicht mehr mit zwei Arrays arbeiten, sondern hat einen einzigen übersichtlichen Datensatz.

Zugriff auf den Inhalt eines assoziativen Perl-Arrays

Sobald die Daten in einem assoziativen Array abgelegt sind, kann der Programmierer auf einzelne Elemente zugreifen:

print $physical_constants{’speed of light‘} . „\n“;

print $physikalische_Konstanten{‚Planck-Konstante‘} . „\n“;

oder sie können den gesamten Inhalt des Arrays ausgeben, indem sie die gespeicherten Bezeichner und Werte untersuchen:

while (($key, $value) = each (%physical_constants)) {

print „$Schlüssel = $Wert\n“;

}

Mit dieser Methode hat der Perl-Programmierer eine sehr einfache, aber effektive Möglichkeit, Datenmengen in seinen Anwendungen zu speichern und darauf zuzugreifen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.