Ich habe eine Baumvariable. Die erste Ebene1 hat eine Liste von Level2-Elementen. Jedes von Level2 hat eine Liste von Level3-Elementen. bis level4.mehrere Enumeratoren auf einem Baum
Ich nedd, um durch level4 (alle level4, wie wenn level1 eine Liste hat) zu iterieren, also erstelle ich einen Enumerator in level1. Es läuft gut. Aber jetzt muss ich Level2 und Level3 auch iterieren. Ich versuche, 2 weitere Aufzählungen in ebenen1 Klasse zu erstellen, aber ich erhalte eine Fehlermeldung in der generischen Funktion
IEnumerator IEnumerable.GetEnumerator()
Ich versuche 3 IEnumerable für ebenen1 Klasse. Aber ich lese viele Themen, die sagen, dass es keine gute Arbeit ist. Diese sagen, um Zusammensetzung zu verwenden. Aber (wenn ich gut verstehe), ich habe nicht 2 Listen in Level1 Klasse, aber Kinderlisten in Kinderlisten in ...
Der Baum kann oft ändern (ein level3 kann von einem level2 zum anderen wechseln. Benutzer kann Elemente auf jeder Ebene hinzufügen/entfernen. Ich kann also nicht alle Level-Elemente in Level1-Klasse speichern.
Die Frage ist: Was ist der beste Weg, etwas wie das
foreach(level2 lvl2 in level1)
{}
foreach(level3 lvl3 in level1)
{}
foreach(level4 lvl4 in level1)
{}
bearbeiten zu tun:
der Baum:
level1
|-> level2 node
|-> level3 node
|-> level4 node
|-> level4 node
|-> level4 node
|-> ...
|-> level3 node
|-> level4 node
|-> level4 node
|-> level4 node
|-> ...
|-> level3 node
|-> level4 node
|-> level4 node
|-> level4 node
|-> ...
|-> ...
|-> level2 node
|-> level3 node
|-> level4 node
|-> level4 node
|-> level4 node
|-> ...
|-> level3 node
|-> level4 node
|-> level4 node
|-> level4 node
|-> ...
|-> ...
|-> level2 node
|-> level3 node
|-> level4 node
|-> level4 node
|-> level4 node
|-> ...
|-> level3 node
|-> level4 node
|-> level4 node
|-> level4 node
|-> ...
|-> ...
|-> ...
Mein Baum Klasse
public class TreeLevel1 : IEnumerable
{
public list<TreeLevel2> treeLevel2 = new list<TreeLevel2>();
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator)GetEnumerator();
}
public TreeLevel4Enumerator GetEnumerator()
{
return new TreeLevel4Enumerator();
}
}
public class TreeLevel2
{
public List<TreeLevel3> treeLevel3 = new List<TreeLevel3>();
}
public class TreeLevel3
{
public List<TreeLevel4> treeLevel4 = new List<TreeLevel4>();
}
public class TreeLevel4
{
//some stuff
}
Der Enumerator cl ass ein BFS und nur level4 zurückgeben. So kann ich tun:
TreeLevel1 lvl1 = new TreeLevel1();
//populate lvl1.treeLevel2 - with lots of TreeLevel2
//populate lvl1.treeLevel2.treeLevel3 - for each treeLevel2
//populate lvl1.treeLevel2.treeLevel3.treeLevel4 - foreach treeLevel3
foreach(Level4 lvl4 in lvl1)
{
//do stuff
}
Jetzt muss ich durch lvl1.treeLevel2 und lvl1.treeLevel2.treeLevel3 iterieren. So erzeuge ich 2 Aufzählungen in TreeLevel1 Klasse von
public TreeLevel2Enumerator GetEnumerator()
{
return new TreeLevel2Enumerator();
}
public TreeLevel3Enumerator GetEnumerator()
{
return new TreeLevel3Enumerator();
}
Zugabe Und dann
foreach(Level2 lvl2 in lvl1)
{
//do stuff
}
foreach(Level3 lvl3 in lvl1)
{
//do stuff
}
foreach(Level4 lvl4 in lvl1)
{
//do stuff
}
benutzen, aber ich erhalte eine Fehlermeldung in dem generischen Enumerator in TreeLevel1 Klasse
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator)GetEnumerator(); //error here
}
Ich verstehe, dass die Das Programm kann nicht auswählen, welcher Enumerator verwendet werden soll. Und so ist meine Frage: Wie kann ich enumeratorartige Funktionen erstellen, um durch jede Ebene zu iterieren (mit einer foreach wäre toll, aber jede andere Möglichkeit ist ok)
Lookup 'Breiten ersten search' – muratgu
Vielleicht [diese] (http://ideone.com/ozdyB0) wird helfen. Lass mich wissen ob es funktioniert. –
Vielen Dank für Ihre Antwort, aber ich denke, ich erkläre nicht, was ich wirklich will. Tatsächlich verwende ich bereits ein BFS, um Level 4 mit einem Enumerator zu durchlaufen. Was ich brauche, ist 2 andere Enumeratoren für level2 und level3. Ich bearbeite meine Fragen zu entwickeln – bubarnet