Thread Hashreferenz nach Anzahl Array Elemente
(4 answers)
Opened by Gast at 2007-11-13 15:31
Hallo zusammen,
ich habe folgendes Problem. Ich muss ein Hashreferenz aufbauen, die sich wie folgt zusammensetzt: In einer existierenden Hashreferenz ($d) befinden sich ein Pfaddefinition(PATH) und ein Name(NAME) des niedrigsten Ordners. Beispiel mit 4 Ebene brauch aber leider unendliche Ebenen. Gruß Slaughter Beispiel: my $d=undef; $d->{1}->{PATH}="100"; $d->{1}->{NAME}="Hundert"; $d->{2}->{PATH}="100/101"; $d->{2}->{NAME}="Hunderteins"; $d->{3}->{PATH}="100/101/102"; $d->{3}->{NAME}="Hundertzwei"; $d->{4}->{PATH}="100/101/102/103"; $d->{4}->{NAME}="Hundertdrei"; my $id="PATH"; my $name="NAME"; my $tree=undef; foreach my $l (sort {$a<=>$b} keys(%$d)){ #Teilen des Pfades, jede Nummder ein Array Element my @k=split("/",$d->{$l}->{$id}); #Sofern sich nur ein Element in dem Array befindet => oberste Pfad Ebene $tree->{$k[0]}->{$id}=$d->{$l}->{$id} if ( @k == 1 ); $tree->{$k[0]}->{$name}=$d->{$l}->{$name} if ( @k == 1 ); #Sofern sich zwei Elemente in dem Array befindet => zweite Pfad Ebene $tree->{$k[0]}->{$k[1]}->{$id}=$d->{$l}->{$id} if ( @k == 2 ); $tree->{$k[0]}->{$k[1]}->{$name}=$d->{$l}->{$name} if ( @k == 2 ); #Sofern sich drei Elemente in dem Array befindet => dritte Pfad Ebene $tree->{$k[0]}->{$k[1]}->{$k[2]}->{$id}=$d->{$l}->{$id} if ( @k == 3 ); $tree->{$k[0]}->{$k[1]}->{$k[2]}->{$name}=$d->{$l}->{$name} if ( @k == 3 ); #Sofern sich vier Elemente in dem Array befindet => vierte Pfad Ebene $tree->{$k[0]}->{$k[1]}->{$k[2]}->{$k[3]}->{$id}=$d->{$l}->{$id} if ( @k == 4 ); $tree->{$k[0]}->{$k[1]}->{$k[2]}->{$k[3]}->{$name}=$d->{$l}->{$name} if ( @k == 4 ); } #Hashreferenz müsste dann so aufgebaut werden: #100->NAME=Hundert #100->PATH=100 #100->101->NAME=Hunderteins #100->101->PATH=100/101 #100->101->102->NAME=Hundertzwei #100->101->102->PATH=100/101/102 |