2009-04-14 4 views
0

In der App, die ich schreibe, versuche ich einen Weg zu finden, Hierarchien effektiv zu speichern. Hier ist ein example.Sammlungen für Hierarchien

Unten können Sie die Knoten sehen, die gespeichert werden sollen. Sollte ich mehrdimensionale Listen verwenden? Das scheint nicht sehr optimal zu sein, oder? Ich dachte, Referenzen wie folgt zu halten:

node.Parent 
node.Children { collection } 

Jeder hat Erfahrung mit dieser Art von Sachen?

Antwort

1

Dies ist eine ziemlich grundlegende Implementierung eines Baumes, ja. Wenn Sie Ihre Sammlung für die Kinder zu einer IList oder IEnumable oder ArrayList machen möchten, liegt es an Ihnen.

Ich würde Ihnen dringend empfehlen, eine generische Implementierung zu erstellen, anstatt eine, die in Ihr Domänenmodell eingegeben wurde, aber das liegt bei Ihnen.

+0

Danke, in Ihrem zweiten Absatz meinen Sie eine generische CustomCollection schreiben? –

+0

Nein, mehr Wie Treenode enthält TreeNode Parent und IEnumerable > Kinder –

+0

Beachten Sie, dass es nur gilt, wie Lucero in einem Beitrag unten erwähnt, wenn alle Objekte vom gleichen Typ oder Abstraktion sind. –

1

Ja. Du hast die richtige Idee. Wenn Sie eine bidirektionale Hierarchie benötigen, würde ich keine mehrdimensionale Liste verwenden ... Ich würde der Baumstruktur einen Knoten hinzufügen, und jeder Knoten enthält einen übergeordneten und eine untergeordnete Sammlung.

Sie sind auf dem richtigen Weg.

1

Wenn nicht alle Elemente vom gleichen Typ sind, kann ich eine abstrakte Basisklasse für eine verknüpfte Liste und untergeordnete Sammlungen in einer solchen Situation verwenden.

+0

Danke, so wie Knoten: BaseNode, Knoten Parent, IEnumerable Kinder? Wenn ich das tue, würden die Eltern/Kinder die tatsächliche Klasse ablegen? –

+0

Wir ,, Ich denke, die Kinder können unterschiedlicher Art sein. Wenn Sie jedoch Generika verwenden, können Sie bei Bedarf auch ein stark typisiertes Elternelement verwenden. Aber normalerweise verwenden Sie einfach die Basisklasse in diesem Muster. – Lucero