| << Mehrdimensionale Arrays | Inhalt | map >> |
| sort | Sortieren von Zahlen | Sortiervorschrift angeben | Sortiervorschrift als Funktion angeben | Sortieren der Zeilen einer Matrix |

sortWie bereits bekannt sein sollte, werden Arrays mit Hilfe des sort-Befehls sortiert. Jedoch geschieht dies auf der Basis von alphanumerischer Sortierung; d. h. Zahlen werden wie Strings behandelt, was bewirkt dass 17 kleiner ist als 9.

Sortieren von ZahlenWas wäre Perl, wenn man obiges Problem nicht beseitigen könnte?
Die Lösung lautet ganz einfach: Man sagt Perl, wie es sortieren soll: Man schreibt nach dem sort-Befehl und vor dem zu sortierenden Array in geschweiften Klammern die Sortieranweisung:
Das fällt auf:

Sortiervorschrift angebenPerl vergleicht also $a mit $b und möchte als Ergebnis 1, 0 oder -1 erhalten. Falls 1 zurückgegeben wird, dann war $a größer, falls 0 zuurückgegeben wird, war $a und $b gleich, falls -1 zurückgegeben wird, war $b größer. Genauer gesagt interpretiert Perl die Rückgabewerte folgendermaßen: eine Zahl größer oder gleich 1 für größer, eine Zahl zwischen -1 und 1 (ausschließlich 1 und -1) für gleich und eine Zahl kleiner gleich -1 für kleiner.
Im obigen Abschnitt haben wir bereits eine Sortiervorschrift angegeben. Diese kann man beliebig gestalten - sie muss eben nur Zahlen wie 1, 0 oder -1 zurückgeben:

Sortiervorschrift als Funktion angebenMan kann die Sortiervorschrift auch als Funktion formulieren. Das sieht dann so aus:
Statt den Code in die geschweiften Klammern zu schreiben, wird dieser in einer extra Funktion angegeben. Auch hier werden die vordefinierten Variablen $a und $b benutzt. Man kann sich so eine spezielle Funktion für Sortierung erstellen und sie immer wieder verwenden.

Sortieren der Zeilen einer MatrixIm folgenden Beispiel soll eine Matrix nach Zeilen sortiert werden. Es wird davon ausgegangen, dass die Matrix nur Zahlen enthält und dass alle Zeilen gleich lang sind. Eine Zeile ist größer als die andere, falls es einen Eintrag in der einen Zeile gibt, der größer ist als der Eintrag an der gleichen Position der anderen Zeile. Vor dieser Position müssen alle gleich sein. Zwei Zeilen sind gleich, falls alle Einträge gleich sind. Eine Zeile ist kleiner als die andere Zeile, falls die andere Zeile größer ist als die eine.
Das fällt auf:
| sort | Sortieren von Zahlen | Sortiervorschrift angeben | Sortiervorschrift als Funktion angeben | Sortieren der Zeilen einer Matrix |
| << Mehrdimensionale Arrays | Inhalt | map >> |
![]()
|
© 2001-2003 Perl, Lehrstuhl Mathe II, Uni Bayreuth |