Stel ik heb een html met de structuur van een land met per regel gegevens zoals naam, oppervlakte, aantal inwoners en de ouder van de record (Provincies,Gewesten,...). Regels waarvan de oppervlakte en het aantal inwoners geen waarde heeft duiden een ouder record aan.
Na ik de gegevens heb ingelezen maak ik een recordstructuur aan en steek ik deze in een hash. Het veld "ouder" laat ik refereren naar het overeenkomstige element in de hash.

Ter eenvoudiging heb ik even een paar records hard gecodeerd en steek ik ze in een hash om ze makkelijk toegankelijk te maken :
Wil ik nu de ouders vinden van een bepaald kind kan ik dat via volgende code voor bv. het Vlaams Gewest:
Wil ik de kinderen van een bepaalde ouder doe ik dat met een geinverteerde hash voor bijvoord Oost-Vlaanderen:
Mijn vraag is de volgende:
Ik heb nu alle records mooi in een hash, maar ik wil de populatie en oppervlakte velden van de ouders invullen aan de hand van de kinderen. Liefst zou ik subroutines (en het recursief oproepen ervan) vermijden. Dan kan ik best een stapel gebruiken? Als het niet anders lukt mag het met recursie natuurlijk, ben er enkel niet helemaal in thuis.
Wil dus dit bereiken:

Graag enige aanwijzing! Dankjewel! (Oplossing is daarom niet nodig, pseudocode zou al veel zijn!)
Na ik de gegevens heb ingelezen maak ik een recordstructuur aan en steek ik deze in een hash. Het veld "ouder" laat ik refereren naar het overeenkomstige element in de hash.

Ter eenvoudiging heb ik even een paar records hard gecodeerd en steek ik ze in een hash om ze makkelijk toegankelijk te maken :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| $record = {
"NAAM" => "Gent",
"INWONERS" => "9999",
"OPP" => "100",
"OUDER" => "Oost-Vlaanderen"
};
$from{$record->{NAAM}}=$record;
$record = {
"NAAM" => "Oost-Vlaanderen",
"INWONERS" => "",
"OPP" => "",
"OUDER" => "Vlaams Gewest"
};
$from{$record->{NAAM}}=$record;
$record = {
"NAAM" => "Belgie",
"INWONERS" => "",
"OPP" => "",
"OUDER" => ""
};
$from{$record->{NAAM}}=$record;
$record = {
"NAAM" => "Vlaams Gewest",
"INWONERS" => "",
"OPP" => "",
"OUDER" => "Belgie"
};
$from{$record->{NAAM}}=$record;
$record = {
"NAAM" => "Stekene",
"INWONERS" => "99",
"OPP" => "10",
"OUDER" => "Oost-Vlaanderen"
};
$from{$record->{NAAM}}=$record;
foreach $k(keys %from){
$from{$k}->{OUDER} = $from{ $from{$k}->{OUDER} };
} |
Wil ik nu de ouders vinden van een bepaald kind kan ik dat via volgende code voor bv. het Vlaams Gewest:
code:
1
2
3
4
5
| $x = "Vlaams Gewest";
do{
print "$_ ";
$x = $from{$x}->{OUDER}->{NAAM};
#}while defined; |
Wil ik de kinderen van een bepaalde ouder doe ik dat met een geinverteerde hash voor bijvoord Oost-Vlaanderen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| while( ($k,$v) = each %from){
push( @{ $children{ $v->{OUDER}->{NAAM}} }, $k );
}
$_ = "Oost-Vlaanderen";
if($children{$_}){
@children = @{$children{$_}};
print "@children";
}
else {
@children = "nobody";
} |
Mijn vraag is de volgende:
Ik heb nu alle records mooi in een hash, maar ik wil de populatie en oppervlakte velden van de ouders invullen aan de hand van de kinderen. Liefst zou ik subroutines (en het recursief oproepen ervan) vermijden. Dan kan ik best een stapel gebruiken? Als het niet anders lukt mag het met recursie natuurlijk, ben er enkel niet helemaal in thuis.
Wil dus dit bereiken:

Graag enige aanwijzing! Dankjewel! (Oplossing is daarom niet nodig, pseudocode zou al veel zijn!)