Thread "Beliebig" tiefes Hash mit keys aus Array erstellen
(22 answers)
Opened by shi8dao at 2011-06-21 08:35
Das hat unter Umständen ein Problem wenn mehrere ähnliche Pfade auftauchen:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 my @var = ( [qw(Hund Katze Maus)], [qw(Hund Katze Ratte)], [qw(Hund Tiger Ratte)], [qw(Hund Tiger Maus)], ) my $hashref = {}; for my $arr ( @var ) { my $tmp = $hashref; for(@$arr) { $tmp->{$_} = {}; $tmp = $tmp->{$_} } } print Dumper $hashref; Bei deinem Code werden alte "Pfade" überschrieben. man kann das mit einer Abfrage verhindern: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 my @var = ( [qw(Hund Katze Maus)], [qw(Hund Katze Ratte)], [qw(Hund Tiger Ratte)], [qw(Hund Tiger Maus)], ) my $hashref = {}; for my $arr ( @var ) { my $tmp = $hashref; for(@$arr) { $tmp->{$_} = {} unless( exists $tmp->{$_} ); $tmp = $tmp->{$_} } } print Dumper $hashref; Aber ich finde es ist besser die Autovivifikation zu nutzen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 my @var = ( [qw(Hund Katze Maus)], [qw(Hund Katze Ratte)], [qw(Hund Tiger Ratte)], [qw(Hund Tiger Maus)], ); my $hashref = {}; for my $arr ( @var ) { my $tmp = \$hashref; $tmp = \$$tmp->{$_} for(@$arr); $$tmp={}; } print Dumper($hashref); Last edited: 2011-06-21 09:58:24 +0200 (CEST) |