PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl: Hash sortieren klappt nicht



SeeksTheMoon
15-02-2006, 18:50
Langsam nerven mich Perl-Hashes...
Ich will einen Hash sortiert ausgeben. In dem Hash stehen (Komma)-Zahlen als Key und Buchstaben als Values, also z.B.
0.03 w
Die Sortierung der Ausgabe soll anhand der keys/Zahlen erfolgen, aber Perl macht da Unsinn, die Ausgabereihenfolge ist z.B. 0.03, 0.27, 0.04, 0.02, 0.32, was offensichtlich chaotisch und nicht sortiert ist.




sub NummernSort {
if($a < $b)
{ return -1; }
elsif($a == $b)
{ return 0; }
else
{ return 1; }
}

[...]

for my $vorschlaege (sort(NummernSort keys(%vorschlagsliste))) {
print "$vorschlagsliste{$vorschlaege} ($vorschlaege), ";
}

Ob ich NummernSort für sort angebe oder nicht, spielt keine Rolle (hab ich von selfhtml), ich hab $a und $b auch mal mit 100 multipliziert um Integer zu bekommen, aber Perl machts einfach nicht....

Caveman
15-02-2006, 20:38
Ich weiß nicht wo Dein Problem liegt :(
Ich habe folgendes Programm gemacht:

#!/usr/bin/perl -w

my %vorschlagsliste;

$vorschlagsliste{0.03} = "a";
$vorschlagsliste{0.27} = "b";
$vorschlagsliste{0.04} = "c";
$vorschlagsliste{0.02} = "d";
$vorschlagsliste{0.32} = "e";


for my $vorschlaege (sort(keys(%vorschlagsliste))) {
print "$vorschlagsliste{$vorschlaege} ($vorschlaege), ";
}

print "\n"; Und es funktioniert.
Dies kommt heraus:

d (0.02), a (0.03), c (0.04), b (0.27), e (0.32),
Perl-Version: v5.8.7

SeeksTheMoon
16-02-2006, 11:54
ah, diesmal war ich es schuld =)
Der Sortiercode an sich funktioniert, aber der war in einem falschen Block gesetzt, so dass das Ergebnis nicht korrekt sortieren konnte.