Werbung einblenden Werbung ausblenden


Home / Tutorials / Perl Handbuch / Bearbeitung von Arrays

einem Array Werte zuweisen
die Anzahl der Elemente und das höchste Element eines Arrays ermitteln
den Inhalt eines Arrays vollständig auslesen
auf einzelne Elemente eines Arrays zugreifen
einen Array spiegeln - reverse
die Elemente eines Arrays sortieren - sort
aus einem Array einen String generieren - join
aus einem Array ein Stück ausschneiden - splice
das erste bzw. das letzte Element eines Arrays entfernen - shift/pop
einzelne Elemente oder ganze Arrays zu einem bestehenden Array hinzufügen - push/unshift
Operationen mit den Elementen eines Arrays ausführen - map

einem Array Werte zuweisen

Nach folgendem Schema kann man einem Array Werte zuweisen:

@melone=("Ich","und","du","Müllers","Kuh","Müllers","Esel","das","bist","du");

die Anzahl der Elemente und das höchste Element eines Arrays ermitteln

Wir haben also einen Array mit 10 Elementen, wobei das höchste Element, nämlich "du" den Wert $melone[9] hat. Das niedrigste Element "Ich" hat den Wert $melone[0].
Sowohl das höchste Element als auch die Anzahl der Elemente lassen sich ermitteln.

Die Anzahl der Elemente erhält man mit:
$kiwi=@melone;

Das ist zwar merkwürdig, aber $kiwi hat jetzt den Wert 10.

Das höchste Element des Arrays, also in diesem Falle 9 , erhält man über die Sondervariable $#melone
print $#melone;

den Inhalt eines Arrays vollständig auslesen

Das Auslesen des Inhalts eines Arrays erfolgt mit:
print @melone;

Damit hat man dann den ganzen Array auf dem Schirm.
Das ist aber in der Regel nicht das, was gewünscht wird.

auf einzelne Elemente eines Arrays zugreifen

In der Regel will man auf die einzelnen Elementen des Arrays zugreifen. In der Regel verwendet man zum Auslesen eines Arrays eine foreach Schleife. Aus Gründen der Vollständigkeit soll noch die, aus allen Programmiersprachen dieser Welt bekannte, for Schleife vorgestellt werden:

for($i=0;$i<=$#melone;$i++)
{
print "$melone[$i] \n";
}

Perl wie auch PHP bieten zum Auslesen von Arrays eine spezielle Schleife, die foreach Schleife.
Die simpelste Version sieht so aus:

foreach(@melone)
{
  print "$_\n";
}

Wenn kein Wert angegeben wird, dann wird jedes einzelne Element des Arrays an die Sondervariable $_ übergeben.
Die einzelnen Element können aber auch an eine Variable übergeben werden. Das sieht dann so aus:

foreach $kiwi(@melone)
{
  print "$kiwi\n";
}

Es gibt auch die Möglichkeit, sich nur Teile eines Arrays zeigen zu lassen.
$kiwi ist jetzt die Laufvariable. Sie läuft von 5 bis 9:

foreach $kiwi(5..$#melone)
{
  print "$melone[$kiwi]\n";
}

Der Array kann auch mit einer while Schleife durchlaufen werden:

while(<@melone>)
{
print $_;
}

Was lernen wir? Es gibt viele Möglichkeiten, Arrays zu "durchwühlen". Da alle verwendet werden, sollte man sie mal gesehen haben. Zum Programmieren reicht allerdings eine Möglichkeit.

einen Array spiegeln - reverse

Reverse spiegelt einen Array nach dem Motto "die letzten werden die ersten sein und die letzten die ersten". Reverse braucht man z.B. bei der Programmierung eines Gästebuchs, wenn man will, dass die letzten Beiträge zuerst aufgeblendet werden.
Im folgenden Beispiel wird der Array @melone gespiegelt:

@enolem=reverse(@melone);
print @enolem;
die Elemente eines Arrays sortieren - sort

Sort sortiert die Elemente des Arrays alphabetisch:

@unsortiert=("Berlin","Amsterdam","Madrid","Brüssel","Freiburg","Rom","Milano");
@sortiert=sort(@unsortiert);
foreach $ordnung(@sortiert)
{
   print "$ordnung \n";
}
aus einem Array einen String generieren - join

Es kommt häufig vor, dass aus einem Array ein String, also eine Zeichenkette, generiert werden soll. Das macht der join Befehl. Die Syntax sieht so aus:

$ich_bin_der_string=join("ich_bin_der_Klebstoff",@ich_bin_der_zusammenzubackende_array);
$ich_bin_der_string=join(" und ", @sortiert);
print $ich_bin_der_string;
aus einem Array ein Stück ausschneiden - splice

Mit splice kann aus einem Array ein Stück ausgeschnitten werden.
Ein Beispiel, in dem der Befehl angewendet wird:

@ausschneiden=("Toll","Mit "," splice"," kann "," man "," Teile "," aus "," einem "," array ",
" ausschneiden ","Einfach","irre","!");
@ausgeschnitten=splice(@ausschneiden,1,9);
print @ausschneiden;
print @ausgeschnitten;

Das Beispiel liefert folgendes Ergebnis:
Für @auschneiden:
TollEinfachirre!
Für @ausgeschnitten:
Mit splice kann man Teile auch einem array auschneiden

Die Funktion splice hat drei Parameter:

  • der Array, aus dem ausgeschnitten wird.

  • der Startpunkt, von dem aus ausgeschnitten wird.

  • die Anzahl der Elemente, die ab dem Startpunkt ausgeschnitten werden sollen, wobei der Startpunkt mitzählt.

Ausschneiden ist hier wörtlich zu nehmen. Der ursprüngliche Array wird um den ausgeschnittenen Teil reduziert.Zur Verdeutlichung noch ein Beispiel, bei dem ein Element des Arrays ausgeschnitten wird:

@banane=("Maier","Müller","Schulze","Schmidt");
slice(@banane,1,1);
print @banane;

Ergebnis: Der Müller ist jetzt weg.

das erste bzw. das letzte Element eines Arrays entfernen - shift/pop

Die Funktion shift kommt oft vor in der Objektorientierten Programmierung, weil hier das erste Element der übergebenen Parameter der Zeiger auf das Objekt ist, der abgefangen werden soll.
Das heißt shift entfernt das erste Element des Arrays und übergibt dieses Element an eine Variable. Pop agiert ähnlich. Es entfernt das letzte Element:

@ausschneiden=("Toll","Mit "," shift"," kann "," man "," Teile "," aus "," einem "," Array ",
" ausschneiden ","Einfach","irre","!");
$ausgeschnitten=shift(@ausschneiden);
print "@ausschneiden\n";
$ausgeschnitten=pop(@ausschneiden);
print "@ausschneiden\n";

Wie man sieht, hat sich Toll verabschiedet, bzw. steckt in $ausgeschnitten.
In dem Beispiel oben eliminiert shift das Toll und pop das Ausrufezeichen.

einzelne Elemente oder ganze Arrays zu einem bestehenden Array hinzufügen - push/unshift

Mit push und unshift kann man einzelne Elemente oder ganze Arrays zu einem bestehenden Array hinzufügen. Der Unterschied besteht darin, push fügt an das Ende eines Arrays an, unshift ergänzt am Anfang.

@array1=(" Banane "," Himbeere "," Karotte ");
@array2=(" Gurke "," Tomate "," Rübe ");
push(@array1,@array2);
print "@array1 \n";
unshift(@array1,@array2);
print "@array1 \n";
Operationen mit den Elementen eines Arrays ausführen - map

Mit map werden bestimmte Operationen mit jedem Element eines Arrays ausgeführt. Das gleiche kann man auch erreichen, wenn der Array eine foreach Schleife durchläuft und jedes Element einzeln "verarztet wird". Vielleicht ist map eleganter?

@rausschneiden=("Andres","Peter","Shokufeh","Yasemin","Maria","David");
@laenge=map(length($_),@rausschneiden);

foreach $kiwi(@laenge)
{
print "$kiwi \n";
}

Das Programm gibt dann für jedes Element des Arrays (Andres, Peter, Schokufeh, etc. ) die Länge aus (6,5,8,7 etc.).

Eine alternative Schreibweise ist:

@rausschneiden=("Andres","Peter","Shokufeh","Yasemin","Maria","David");

foreach (@rausschneiden)
{
push(@laenge,length($_));
}

foreach $kiwi(@laenge)
{
print "$kiwi \n";
}
vorhergehendes Kapitel