Hash sortieren
Hans
- perl
Hi !
Folgendes:
my %alpha_hash;
$alpha_hash{"0"}="Hans";
$alpha_hash{"1"}="Peter";
$alpha_hash{"2"}="Klaus";
So, jetzt möchte ich gerne sortieren, um folgendes Ergebnis zu bekommen:
"2" => "Klaus"
"1" => "Peter"
"0" => "Hans"
Wie sieht die syntax aus, damit der Hash alphabetisch absteigend nach den VALUES sortiert wird?
Vielen Dank !
Gruß
Hans
hi,
$alpha_hash{"0"}="Hans";
$alpha_hash{"1"}="Peter";
$alpha_hash{"2"}="Klaus";So, jetzt möchte ich gerne sortieren, um folgendes Ergebnis zu bekommen:
"2" => "Klaus"
"1" => "Peter"
"0" => "Hans"
foreach $value( sort {$b <=> $a} values %alpha_hash){
print "$value\n";
}
--roro
Ausgabe nach Values sortiert
foreach $value( sort {$b <=> $a} values %alpha_hash){
print "$value\n";
}
LOL Perls herrliche Art die Dinge mit einem Einzeiler auf den Punkt zu bringen.
mist hab ich geschrieben, tschuldigung,
der Vergl. OP ist cmp für Zeichenketten, nicht das Spaceship <=> , das ist für Zahlen.
##################### run ...
#!/usr/bin/perl
use strict;
my %alpha_hash;
$alpha_hash{"0"}="Hans";
$alpha_hash{"1"}="Peter";
$alpha_hash{"2"}="Klaus";
foreach my $key ( sort{$alpha_hash{$a} cmp $alpha_hash{$b}} keys %alpha_hash){
print "$key => $alpha_hash{$key}\n";
}
print "\n ====================== \n";
foreach my $value( sort {$a cmp $b} values %alpha_hash){
print "$value\n";
}
--roro
Hallo,
Dabei hat sich der OP in einen Widerspruch verstrickt. Explizit meinter er dass er nach den Werten des Hashes sortieren möchte. Das Beispielergebnis jedoch lässt vermuten, dass er 'nur' die Schlüssel des Hashes absteigend sortieren will, also
foreach my $key( sort {$b cmp $a} keys %alpha_hash){
print "$key => $alpha_hash{$key}\n";
}
Grüße
Klaus
Hallo Klaus,
nein das ist kein Widerspruch, nur Zufall. Ich brauche nur die Reihenfolge der Keys für den nach values sortierten Hash. Ich werde danach mit den keys aus dem Hash als Indizes auf verschiedene Arrays zugreifen. Somit brauche ich die sortierten Values nur um die richtige Reihenfolge der Array-Indizes zu bekommen !
Gruß
Hans
Hi --roro !
Super! Mit diesem Sortierkram und Hashes stehe ich halt noch auf Kriegsfuß. Ich war froh, daß mir Hashes als Lösungsmöglichkeit überhaupt eingefallen sind ;-)
Gruß
Hans
Hi,
musst dir den Code noch umschreiben - aber das Sortierverfahren solltest du benutzen können...in diesem Code wird nur der Index sortiert (so kann das Array bleiben wie es ist) kannst das natürlich auch direkt sortieren.
int main()
{
int a[4],b[4],i,j,m,t;
cout << endl << "Bitte 4 Zahlen eingeben: " << endl;
for (i=0; i<4; i++)
{
cin >> a[i];
b[i] = i;
}
// Selection Sort
for (i=0; i<3; i++)
{
m=i;
for (j=i+1; j<4; j++)
{
if (a[b[j]]<a[b[m]])
m=j;
}
t=b[i];
b[i]=b[m];
b[m]=t;
}
cout << endl << "Original-Array: " << a[0] << " " << a[1] << " " << a[2] << " " << a[3];
cout << endl << "Index-Zugriff : " << a[b[0]] << " " << a[b[1]] << " " << a[b[2]] << " " << a[b[3]];
return 0;
}
Gruss
Seppel
Hallo,
ungeachtet dessen, dass der OP ja einen Hash sortieren will und kein Array, würde ich trotzdem eher die Perl-Methode bevorzugen:
@sortiertesArray = sort {$a <=> $b} @array
Markus