hotti: Hash sortieren?

Beitrag lesen

hi,

@{$temphash{$Id}} = ($titel,$autor,$preis,$erscheinungsjahr);

Ich möchte am Ende ich eine Liste von $Id erhalte, die nach Preis sortiert ist.

Geht das?

Wir nehmen die Schwartzsche Transformation, da wird das Sortierkriterium  auf eine bestimmt Position in einem anonymen Array gelegt, zum Verstehen, lese den Code von unten nach oben:

  
use strict;  
use warnings;  
  
my %temphash = ();  
  
# Einträge zum Testen  
# Für das Array eine Referenz, Preis in [2]  
$temphash{'1a'} = ['A-Test','Anton','99','1978'];  
$temphash{'2b'} = ['B-Test','Berta','11','1975'];  
$temphash{'3c'} = ['C-Test','Cäasar','33','1980'];  
# gesucht eine Liste mit Id's die nach Preis sortiert ist  
  
my @IDs =  
	map{$_->[0]}                             # keys aus [0]  
	sort{$a->[1][2] <=> $b->[1][2]}          # Sortierkriterium in [1][2]  
	map{[$_, $temphash{$_}]}keys %temphash;  # keys in [0], ref in [1]  
  
# Ausgabe  
print join "\n", @IDs;  

Hotti