Thread Struct array und unterprogramm
(20 answers)
Opened by Eles at 2010-10-28 13:29
Ich habe jetzt gesehen, dass der Preis offenbar nicht als Zahl sondern nur als String vorliegt, weil die Nachkommastellen durch ',' abgetrennt werden.
Der Verleichsoperator für Strings wäre cmp statt <=>. Aber der liefert wohl nicht die von Dir gewünschte Reihenfolge. Also musst Du vorher den Preis als Zahl erzeugen. Da gibt es zwei Möglichkeiten: (1.) Du modifizierst das Preisfeld. Code (perl): (dl
)
1 2 print "<!-- $_ -->\n" foreach sort {$a->[3] <=> $b->[3]} map {$_->[3] =~ s/,/./; $_}(@Artikel); (2.) Oder Du fügst für das Sortieren ein Feld mit dem Preis als Zahl ein. Mit unshift landet das am Anfang des Arrays. Mit push am Ende: Code (perl): (dl
)
1 2 3 4 foreach my $a sort {$a->[0] <=> $b->[0]} map {unshift @$_, $_->[3]; $_->[0] =~ s/,/./}(@Artikel) { print "<!-- $a -->\n"; } Achtung: Beide Varianten modifizieren die Datenstruktur des Artikels. Ggf. mußt Du die Änderung nach den Sortieren wieder rückgängig machen. (Bei der zweiten Variante mit shift bzw. pop) Noch ein Hinweis: Wenn Du die Preise umgekehrter Reihenfolge haben willst, kannst Du in der Sortierfunktion $a und $b vertauschen oder vor sort noch ein reverse setzen. (Disclaimer: Alle Codebeispiele nicht ausprobietr] |