perl Hash nach Werten sortieren.

  • Ersteller aktivfrühstück
  • Erstellt am
A

aktivfrühstück

Eroberer
Hallo Leute,

ich mal wieder:)

gibt es eine Möglichkeit in Perl einen Hash nach den Werten absteigend bzw. aufsteigend zu sortieren?

mit:

Code:
foreach $temp(sort{$a <=> $b} keys %hash)
{
print "schlüssel: $temp und zugehöriger Wert: $hash{$temp}\n";
}

kann man ja die Schlüssel aufsteigend sortieren und den zugehörigen Wert finden.
----
Ich möchte aber die Werte aufsteigend sortieren und den zugehörigen Schlüssel finden.

foreach $temp(sort{$a <=> $b} values %hash)
{
print "Wert und zugehöriger Schlüssel\n"; #hier weiß ich net weiter
}

ich möchte nun der sortierten Wertliste wieder die passenden schlüssel zufügen.
Aber man benötigt ja den SChlüssel um auf den Wert zuzugreifen
geht das auch irgendwie andersrum???

Jetz könnte man sagen warum nehme ich nicht einfach die Werte und nutze diese als Schlüssel. Aber so soll das nicht sein:)

grüße an alle!:))
falko
 
Ähm,

wie du willst die Werte sortiert haben, jedem Wert soll aber noch sein key zugeordnet sein?

Wieso schreibst du die Werte nicht sortiert zusammen mit den keys in ein array of arrays?
 
du kannst eigentlich ein hash nicht nacht werten sortieren, wieso sollte man sowas? ist doch doof.

perl -e '%t=(foo => c, snafu => b, bar => a); map { print "$_ => $t{$_} $/"; } (sort { $t{$a} <=> $t{$b} } keys %t) '
 
Zuletzt bearbeitet:
Code:
foreach my $temp (sort { $hash{$a} <=> $hash{$b} } keys %hash) {
  print $temp . " => " . $hash{$temp};
}

{edit nach smg's edit}
wieso sollte man sowas? ist doch doof.
Aha. Du kennst den Anwendungsfall doch gar nicht.

Nebenbei, man sollte map nicht verwenden, wenn man den Rückgabewert von map nicht verwendet oder Werte direkt maniupliert. Es ist zudem unleserlich.
 
Zuletzt bearbeitet:
du kannst eigentlich ein hash nicht nacht werten sortieren, wieso sollte man sowas? ist doch doof.

Was ist das für eine sinnlose und falsche Aussage?

Die Lösung steht ja schon da und ist auch der Perlfaq zu entnehmen.


Aber warum das doof sein soll, erschließt sich mir nicht wirklich.

Das simpelste Anwendungsgebiet ist das Zählen von beliebigen Daten über gleiche Keywerte, die dann nach Häufigkeit ausgegeben werden.

Etwa gleiche Zeilen einer Datei nach Häufigkeit
Code:
perl -ane '(/^$/)?1:$h{$_}++;END{print "$h{$_}\t$_" for (sort{$h{$b}<=>$h{$a}} keys %h )}' DATEI
 
Hey und Guten Morgen,

Dankeschön, es funktioniert:) und wieder was dazugelernt!

Habe so eine Art Ranking gemacht. Die SChlüssel sind die Personennamen und die Werte die Beurteilungen. Dazu wollte ich den Besten oben stehen haben.


gruß :)
 

Ähnliche Themen

Perl: Key im Hash via Referenz setzen

bash: Fehlermeldung und Werte in Array sortieren?

Probs mit Perl script

Cron

Ungewollte Ueberspeicherung von Werten eines struct in einem hash

Zurück
Oben