Thread Hashreferenz nach Anzahl Array Elemente (4 answers)
Opened by Gast at 2007-11-13 15:31

Gast Gast
 2007-11-13 15:31
#102357 #102357
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

View full thread Hashreferenz nach Anzahl Array Elemente