Thread Struct array und unterprogramm (20 answers)
Opened by Eles at 2010-10-28 13:29

clms
 2010-10-29 15:37
#142331 #142331
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
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]

View full thread Struct array und unterprogramm