트리 변수가 있습니다. 첫 번째 레벨 1에는 level2 요소 목록이 있습니다. 각 level2에는 level3 요소 목록이 있습니다. 레벨 4까지.트리의 다중 열거 자
레벨 4 (레벨 1에 목록이있는 것처럼 모든 레벨 4)를 반복하기 때문에 level1에 열거자를 만듭니다. 잘 작동한다. 하지만 이제 레벨 2와 레벨 3도 반복해야합니다. 나는 수준 1 클래스의 2 개 이상 열거를 만들려고하지만 나는 일반적인 기능 나는 수준 1 클래스 3를 IEnumerable을 사용하려고
IEnumerator IEnumerable.GetEnumerator()
에 오류가 발생합니다. 하지만 좋은 일이 아니라고 말하는 많은 주제를 읽었습니다. 이들은 구성을 사용한다고 말합니다. 그러나 (잘 이해한다면) 레벨 1 클래스에는 2 개의 목록이 없지만 하위 목록에는 2 개의 목록이 없습니다 ...
트리가 자주 변경 될 수 있습니다 (레벨 3는 레벨 2에서 다른 레벨로 변경 될 수 있습니다.) 사용자 모든 레벨에서 요소를 추가/제거 할 수 있습니다. 따라서 각 레벨 요소를 level1 클래스에 쉽게 저장할 수 없습니다.
질문 :
트리 :
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
|-> ...
|-> ...
|-> ...
내 나무 클래스
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
}
가장 좋은 방법은 그
foreach(level2 lvl2 in level1)
{}
foreach(level3 lvl3 in level1)
{}
foreach(level4 lvl4 in level1)
{}
편집 같은 것을 수행 할 작업 열거 자 cl 엉덩이는 BFS를하고 레벨 4 만 반환합니다. 그래서 내가 할 수있는 :
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
}
가 지금은 lvl1.treeLevel2 및 lvl1.treeLevel2.treeLevel3을 반복해야합니다. 그래서
foreach(Level2 lvl2 in lvl1)
{
//do stuff
}
foreach(Level3 lvl3 in lvl1)
{
//do stuff
}
foreach(Level4 lvl4 in lvl1)
{
//do stuff
}
을 사용하여 다음
public TreeLevel2Enumerator GetEnumerator()
{
return new TreeLevel2Enumerator();
}
public TreeLevel3Enumerator GetEnumerator()
{
return new TreeLevel3Enumerator();
}
그리고 추가하여 TreeLevel1 클래스 2 개 열거를 생성하지만 내가 이해
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator)GetEnumerator(); //error here
}
TreeLevel1 클래스의 일반 열거에 오류가 프로그램은 사용할 열거자를 선택할 수 없습니다. 그리고 내 질문은 : 어떻게 각 레벨을 통해 반복하는 열거 자 같은 함수를 만들 수 있습니다 (foreach를 사용하여 위대한 것입니다,하지만 다른 가능성은 괜찮습니다)
룩업'아마 너비 우선 search' – muratgu
[이 (http://ideone.com/ozdyB0) 도움이 될 것입니다. 작동하는지 알려주세요. –
답장을 보내 주셔서 감사합니다. 그러나 저는 제가 정말로 원하는 것을 설명하지 못한다고 생각합니다. 사실 열거자를 사용하여 레벨 4를 반복하는 데 이미 BFS를 사용합니다. 내가 필요한 것은 level2와 level3에 대한 2 개의 다른 열거 자입니다. 개발할 질문을 편집합니다. – bubarnet