Sortierung nach zwei Kriterien - wie nur?
Markus
- perl
Hallo,
ich habe folgenden Hash aus Namen, Zahlen definiert:
%ages = ('Rolf'=>2,'Erwin'=>1,'Otto'=>1,'Michael'=>1,'Uwe'=>1);
Ich möchte nun eine Ausgabe absteigend sortiert nach Zahlen. Bei gleicher Zahl soll dann auch Namen sortiert werden.
@keys = sort{$ages{$b}<=>$ages{$a}} keys %ages;
foreach $key (@keys)
{
print "$key = $ages{$key}\n";
}
Ausgabe:
Rolf = 2
Michael = 1
Otto = 1
Erwin = 1
Uwe = 1
Wie bekomme ich aber das 2-te Sortierkriterium hin, um folgende Ausgabe zu bekommen:
Ausgabe:
Rolf = 2
Erwin = 1
Michael = 1
Otto = 1
Uwe = 1
Danke im voraus!
Hallo Markus,
Wie bekomme ich aber das 2-te Sortierkriterium hin, um folgende Ausgabe zu bekommen:
mit einer simplen Oder Verknüpfung:
@keys = sort{ $ages{$b} <=> $ages{$a}
|| $names{$a} <=> $names{$b} } keys %ages;
siehe auch sort bei perldoc
Gruß,
Benne
entschuldigt mich für den Fehler.
@keys = sort{ $ages{$b} <=> $ages{$a}
|| $names{$a} cmp $names{$b} } keys %ages;
muss das natürlich heißen
Gruß,
Benne
hi Benne,
danke dir vielmals!
helau
markus
Hi Benne,
ich habe dich zu früh gelobt. Es klappt leider nicht.
%ages = ('Rolf'=>2,'Erwin'=>1,'Otto'=>1,'Michael'=>1,'Uwe'=>1);
@keys = sort{$ages{$b} <=> $ages{$a} || $names{$a} cmp $names{$b}} keys %ages;
foreach $key (@keys)
{
print "$key = $ages{$key}\n";
}
Der Output ist wieder:
Rolf = 2
Michael = 1
Otto = 1
Erwin = 1
Uwe = 1
Ich möchte aber diesen Output haben:
Rolf = 2
Erwin = 1
Michael = 1
Otto = 1
Uwe = 1
Bei gleichen Zahlen soll auch nach Name sortiert werden.
Weist du wo der Fehler ist?
Bye
Markus
Wie bekomme ich aber das 2-te Sortierkriterium hin, um folgende Ausgabe zu bekommen:
Ausgabe:
Rolf = 2
Erwin = 1
Michael = 1
Otto = 1
Uwe = 1
Ihr wart auf dem richtigen Weg:
#!/usr/bin/perl -w
use strict;
my %ages = ('Rolf'=>2,'Erwin'=>1,'Otto'=>1,'Michael'=>1,'Uwe'=>1);
my @keys = sort{ $ages{$b} <=> $ages{$a}
|| $a cmp $b } keys %ages;
foreach my $key (@keys)
{
print "$key = $ages{$key}\n";
}
Struppi.
Hi Struppi,
tausend Dank an den Profi. Es klappt.