Kai Diefenbach: Sortieren einer Tabelle

Beitrag lesen

Hallo Holger, Alex

Hallo Holger,

my @unsortiert = sort {(split(//,$a))[4] cmp (split(//,$b))
[4]} besucher;
@sortiert = reverse @unsortiert;           ^.........1)            ^..........2)
               ^..........3)

Da kann ich Dir hoffentlich helfen ;-)

  1. Verwende einfach statt cmp (Stringvergleich) <=> (numerischer
    Vergleich)
  2. fehlt hier nicht ein Ed? ;-)
  3. reverse kannst Du Dir ersparen, wenn Du $a und $b vertauschst.
    Dann ist @unsortiert (was ja eigentlich nicht stimmt ;-) in
    absteigender Reihenfolge sortiert.

Zusaetzlich dazu sollte man noch sagen, dass man das split ausserhalb
des sort Blocks vornehmen sollte, da dieser sehr haeufig durchlaufen werden kann.

Hier kann man sich die Schwartz'sche Transformation zur Hilfe nehmen
s. perldoc -q sort / perlfaq4
How can I sort a array by (anything)

Bei Deinem Beispiel wuerde das dann so aussehen:

my @sortiert= map {$_->[0]}                        
              sort {$b->[1] <=> $a->[1]}            
       map { [$_, (split //,$_)[4] ] } @besucher;

Gruß AlexBausW

Gruss
   Kai