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

haj
 2018-06-14 16:12
#188530 #188530
User since
2015-01-07
527 Artikel
BenutzerIn

user image
Eine Alternative ist, die [$start,$ziel]-Elemente gleich um die passende Entfernung anzureichern. Dann werden die Vergleichsroutine und die Weiterverarbeitung einfacher:

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,$entfernung{$start}{$ziel}];
    }
}

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


Für das Umbauen von Datenstrukturen bin ich großer Fan von map. Im Fall geschachtelter Hashes finde ich aber die Lösung von clms leichter lesbar als die Schachtelmap:
Code (perl): (dl )
1
2
3
4
5
6
7
my @list = map {
    my $start  = $_;
    map { [$start, $_, $entfernung{$start}{$_}] } keys %{$entfernung{$start}};
} keys %entfernung;

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

View full thread HoH sortiert ausgeben