hotti: Hash sortieren?

Beitrag lesen

hi Chris,

das P. ist übrigens gelöst, war ein Crosspost (anderes Forum), aber das nurmalso nebenbei ;)

Darum kümmert sich sort selber. Deine Aufgabe ist es nur, eine Subroutine anzugeben,

In diesem Fall ist das nicht notwendig, genausowenig wie 'meine' Schwartzsche Transformation (1). Eine Subroutine oder die Schwartzsche Transformation wird nur erforderlich, wenn das Sortierkriterium in der Liste nicht direkt adressierbar ist, was hier jedoch der Fall ist:

Wir haben einen Hash mit den IDs und die jeweiligen Werte sind Array-Referenzen, wobei das Sortierkriterium in der Arrayreferenz auf dem Index [2] liegt und numerisch ist (der Preis).

Das Sortierkriterium 'Preis' ist somit adressierbar wie folgt:

  
  $preis = $hash{$id}->[2]; # nur zum Verständnis  

Zum Sortieren genügt tatsächlich die sort()-Funktion, iteriert wird über die Keys des Hash wie folgt:

  
my @IDs = sort{$temphash{$a}->[2] <=> $temphash{$b}->[2]} keys %temphash;  

Die Schwartzsche Transformation ist dennoch nicht uninteressant. In dem zuunterst liegenden map{} wird ein anonymes Array erzeugt und das Sortierkriterium auf einen bestimmten Index gelegt. Hier an dieser Stelle käme eine Subroutine rein, die ggf. das Sortierkriterium aus den Werten des Hash ermittelt, z.B. eine Stringfunktion oder eine Regular-Expression.

Hotti

--
(1) War ein Schnellschuss, sorry ;)