Autor Beitrag
Pepp3r
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82



BeitragVerfasst: Do 04.04.13 12:43 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 863
Erhaltene Danke: 142

Win7
VS 2013, VS2015
BeitragVerfasst: Do 04.04.13 12: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82



BeitragVerfasst: Do 04.04.13 13: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):
ausblenden PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function echoValue($node){
  echo function traverse($node)->getValue(){ //hier bekomme ich lediglich das Ergebnis des letzten Durchlaufs
         return $node;
         for ($index=0$index<=count($node->getChildren); $index++){
           $this->traverse($node->getChild($index));
         }
       }
}


Zuletzt bearbeitet von Pepp3r am Do 04.04.13 13:15, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Chefentwickler
Beiträge: 20313
Erhaltene Danke: 2102

Win 10
C# (VS 2017)
BeitragVerfasst: Do 04.04.13 13: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.
ausblenden PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function Iterate($max$callback) {
  for($i = 0$i < $max$i++)
    $callback($i);
}


//Aufruf:
Iterate(10function($value) {
  echo $value;
});

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Pepp3r Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82



BeitragVerfasst: Do 04.04.13 14:14 
Wunderbar, genau das habe ich gesucht!
Vielen Dank! :)