Einzelnen Beitrag anzeigen

Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#1

Kompakter Zugriff auf Unter-Elemente einer Baumstruktur

  Alt 4. Mai 2012, 19:04
Schönen guten Tag - ich hätte da gern ein Problem ...

Es geht um den Zugriff auf Elemente einer selbstgebauten Baumstruktur. Folgendes Beispiel:
Code:
Node1
  + Node2
      + Node3
          + Node 3.1
          + Node 3.2
          + Node 3.3
          + Node 3.4
          + Node 3.5
Ziel ist es, die Unterknoten 3.1 bis 3.5 in eine Liste oder ein Array zu bekommen. Ich kenne den Aufbau des Baumes, kann also den kompletten Pfad über die Nodes 1, 2 und 3 angeben. Aber wie mache ich das mit der gringst-möglichen Schreibarbeit?


Ich könnte mich natürlich Ebene für Ebene durchhangeln - aber da tippe ich mir ja 'nen Wolf. Oder man könnte so etwas wie ein mytree.find_node_by_name('Node3') implementieren, aber eine Suche wollte ich gerade vermeiden, da ich ja weiß, wo der Knoten ist und zu Gunsten der Performance möchte dieses Wissen da auch irgendwie reinstecken.

Nun bin ich über "Fluent Interfaces" gestolpert. Und die Notation kommt dem, was ich will, schon halbwegs nahe: mytree.get('Node1').get('Node2').get('Node3') . Aber nur für einen Zugriff da jetzt das komplette Interface-Geraffel reinbasteln - das erscheint mir ein wenig überdimensioniert. Im Moment gebe ich dem Baum ein dynamisches Array - aber als schön empfinde ich das eigentlich auch nicht: mytree.get( ['Node1', 'Node2', 'Node3'] ); Parallel dazu habe ich dann noch mytree.get( 'Node1.Node2.Node3' ) und fuddel mir den erhaltenen String dann auseinander, um den Weg durch den Baum zu finden. (In meinem Fall kann ich ausschließen, dass die Knoten im Namen einen Punkt enthalten.) Aber irgendwie ist das doch alles holperig ... irgendwie fuddelig eben.
Welche Alternativen könnte es denn da noch geben? Ich würde gern mit möglichst einer Anweisung an die gewünschten Unterknoten kommen.


... ach ja - eine klitzekleine Randbedingung gibt es noch: Es könnte sein, dass es den Knoten und seine Unterknoten auch mal gar nicht gibt. In diesem Fall müsste ich ein leeres Array oder eine leere Liste als Resultat dieser Operation zurück erhalten. Aus diesem Grund scheint mir die Verkettung irgendwelcher Node-Objekte nicht (so richtig) in Frage zu kommen...
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat