Siechfred: array ... sort ... zahlen ... problem ...

Beitrag lesen

Tag Struppi.

@sortiert = map { $_ -> [0]}
sort {  $b->[0] <=> $a->[0] }
map { [ $_, (split/;/)[0] ] } @daten;
Das ist falsch.

Richtig. Der Fehler liegt allerdings nicht in den map-Anweisungen, sondern in der sort-Anweisung (ich bin mir nicht sicher, dass du das so gemeint hast).

Du willst:
[...]
my @sortiert = map { $_->[0]}
sort {  $b->[1] <=> $a->[1]  }
map { [ $_, (split/;/)[0,1] ] } @daten;

Wozu sollte er die ersten beiden Teile extrahieren wollen, wenn er doch nur nach dem ersten Teil sortieren will? Richtig wäre es so:

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

Es ginge übrigens auch ohne Schwartzsche Transformation:

my @sortiert = sort { substr($b, 0, index($b, ";")+1) <=> substr($a, 0, index($a, ";")+1) } @Array;

Allerdings zeigt das Beispielskript, dass die Schwartzsche Transformation schneller ist.

@Gustl: Dein Code konnte mit "<=>" nicht funktionieren, da die perleigene Typumwandlung String->Integer daran scheitern musste, dass deine Array-Elemente nicht-numerische Zeichen enthielten. Nur zur Ergänzung: Siechfred versucht, die Schwartzsche Transformation zu erklären ;-)

Siechfred

--
«Ich liebe euch doch alle!»