Thread HoH sortiert ausgeben (5 answers)
Opened by roli at 2018-06-14 13:21

clms
 2018-06-14 14:00
#188528 #188528
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
Der verlinkte Artikel hilft Dir nicht viel weiter, weil er ein ganz anderes Problem beschreibt, als Du lösen willst. Dort werden nur die Einträge der ersten Hash-Ebene sortiert. Sortierkriterium ist der Value zu einem Key aus der 2. Hash-Ebene.

Du willst dagegen die Key-Kombinationen {Start}{Ziel} nach dem Value sortieren. Die Liste, die Du sortieren willst besteht also nicht nur aus der ersten Hash-Ebene sondern aus allen Kombinationen. Und - das hast Du nicht explizit gesagt, ist aber meine Vermutung - Du willst ohne Berücksichtigung der Gruppierung in dne Hashes "flach" sortieren, also
Code: (dl )
1
2
3
4
"Musterstadt" => "Kleines Kaff"  = 1226
"Jwd" => "Haupstadt" = 3745
"Musterstadt" => "Hauptstadt" = 4345
"Jwd" => "Kleines Kaff" = 5678

anstatt zunächst den ersten Key und dann den zweiten wie in
Code: (dl )
1
2
3
4
"Musterstadt" => "Kleines Kaff"  = 1226
"Musterstadt" => "Hauptstadt" = 4345
"Jwd" => "Haupstadt" = 3745
"Jwd" => "Kleines Kaff" = 5678


Also würde ich erstmal die flache Liste zusammenstellen und sie dann sortieren (ungetestet):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
my @list; # Komibantionen ['start','ziel']
foreach my $start (keys %entfernung) {
   foreach my $ziel (keys %{$entfernung{$start}}) {
     push @list, [$start,$ziel];
   }
}

my @sorted_list = sort {$entfernung{$a->[0]}{$a->[1]} <=> $entfernung{$b->[0]}{$b->[1]}} @list;
printf "Von %s nach %s: %d\n", @$_, $entfernung{$_->[0]}{$_->[1]} foreach @sorted_list;

Das ist sicher noch nicht optimal, aber die grundlegende Idee sollte klar sein.

View full thread HoH sortiert ausgeben