Antwort: Sortieren mit Perl...

Kai.Windmoeller at rokd.de Kai.Windmoeller at rokd.de
Wed Jan 26 08:33:15 CET 2000


Das einfachste ist, das Schreiben einer eigenen Sortierfunktion.

Das is nicht schwierig, weil man nur den Vergleich definieren brauch.

@ergebnis = sort {Vergleichsfunktion} (Liste);

Häufig findet man das in dieser Form

@ergebnis = sort &by_name (Liste);

oder so ähnlich.

die Funktion hat zwei lokale Variablen definiert
$a und $b,
der Rückgabewert der Funktion ist
-1 wenn $a < $b
0 wenn $a == $b
1 wenn $a > $b

Bei Hashes ist $a,$b jeweils der Schlüssel des Eintrags.

Du wirst warscheinlich die beinen operatoren
<=> und cmp praktisch finden, weil die diese Vergleiche
für Zahlen bzw. Strings durch führen
$erg = $a <=> $b;

Die Funktion die du suchst sieht warscheinlich so aus


@Ergebnis = sort &log (@Liste);
sub log
{
     local ($erg, @a, @b);
     @a = split /;/, $a;
     @b = split /;/, $b;

     $erg = $b[3] <=> $a[3]; # Falsch rum für umgekehrte Reihenfolge
     if ($erg == 0)
     {
          $erg = $b[1] <=> $a[1]; # Falsch rum für umgekehrte Reihenfolge
          if ($erg == 0)
          {
               $erg = $a[0] cmp $b[0];
          }
     }

     $erg;
}

Ich hoffe dies hilft und ich habe keine Fehler gemacht.

Gruß

Kai





More information about the Linux mailing list