Entwickler-Ecke
Programmiersprachen (Server) - Funktionsergebnisse während eines rekursiven Durchlaufs
Pepp3r - Do 04.04.13 13:43
Titel: Funktionsergebnisse während eines rekursiven Durchlaufs
Hallo liebe Entwickler-Community,
ich stehe vor folgendem Problem:
Es gibt eine rekursive Funktion "traverse", die eine Baumstruktur durchläuft.
Die Funktion gibt den jeweiligen Knoten zurück.
Gibt es eine Möglichkeit jene Knoten ab zu fangen ohne sie in beispielsweise einem array zwischen zu speichern?
Lg
Jones
jfheins - Do 04.04.13 13:57
Was verstehtst du denn unter abfangen?
Statt die Knoten in einem Array zu speichern kannst du sie auch direkt in der Konsole ausgeben, in nem Memo ausgeben, per showmessage/Messagebox ausgeben, Breakpoint mahcn und angucken, etc.
Pepp3r - Do 04.04.13 14:13
Abfangen bedeutet, dass ich _eine_ Funktion "traversieren" habe, dessen return-Wert ein Knotenobjekt ist, den ich je nach Zweck weiterverarbeiten kannt.
Ein Knoten hat mehrere Instanzvariablen.
In einem Fall brauche ich die ID im anderen Fall den Wert. Ich brauche also die Funktion "traversieren", die ich im Einzelfall einfach erweitere.
Die Funktion soll etwa so funktionieren (Pseudo):
PHP-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| function echoValue($node){ echo function traverse($node)->getValue(){ return $node; for ($index=0; $index<=count($node->getChildren); $index++){ $this->traverse($node->getChild($index)); } } } |
Christian S. - Do 04.04.13 14:27
Wenn ich Dich richtig verstanden habe, brauchst Du eine Callback-Funktion, welche du
traversieren übergibst und welche dann in jedem Durchlauf aufgerufen wird.
Damit wird in jedem Schleifendurchlauf die Callback-Funktion aufgerufen. Die habe ich hier als anonyme Funktion gemacht, Du kannst aber auch eine "normale" Funktion übergeben.
PHP-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function Iterate($max, $callback) { for($i = 0; $i < $max; $i++) $callback($i); }
Iterate(10, function($value) { echo $value; }); |
Pepp3r - Do 04.04.13 15:14
Wunderbar, genau das habe ich gesucht!
Vielen Dank! :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!