我按以下方式设置了一个列表,我想以相反的顺序搜索和操作(删除项目),但我无法找到一个好方法。
目前,该列表是Observable Collection
,但我可以将其更改为其他类型。
我可以使用递归搜索列表,但是如何搜索(从孩子开始并按照我的方式工作)?
ID,ListOfChildren<>,名称
例如:
ID: 1, ListOfChildren Count = 2, Name = "Room 1"<br>
--- ID 10, ListOfChildren, Count = 0, Name = "Bed 1.1"<br>
--- ID 11, ListOfChildren, Count = 0, Name = "Bed 1.2"<br>
ID: 2, ListOfChildren Count = 2, Name = "Room 2"<br>
--- ID 12, ListOfChildren, Count = 0, Name = "Bed 2.1"<br>
--- ID 13, ListOfChildren, Count = 0, Name = "Bed 2.2"<br>
ID: 3, ListOfChildren Count = 2, Name = "Room 3"<br>
--- ID 14, ListOfChildren, Count = 0, Name = "Bed 3.1"<br>
--- ID 15, ListOfChildren, Count = 0, Name = "Bed 3.2"<br>
谢谢, 比尔
答案 0 :(得分:0)
您可以执行有序搜索的相反操作,让方法返回,需要删除子项。重写命令实际上是反向的。 或者添加对子节点中父节点的引用,是的,这需要额外的内存,这就是为什么你几乎总是必须遍历树。
public class Tree
{
private static Random rand = new Random();
public List<Tree> Children = new List<Tree>();
public Tree Parent;
public string Name;
public Tree(Tree parent)
{
Parent = parent;
Name = rand.Next(10000).ToString();
}
// Removing without tree traversal.
public void DeleteParent()
{
this.Parent.Parent.Children.Remove(this.Parent);
}
public bool Remove(string name)
{
for(int i = Children.Count - 1; i >= 0; i--)
{
if (Children[i].Remove(name))
{
// Use a for-loop with index to remove the child right away.
Children.Remove(Children[i]);
// Extra remove handling
i--;
}
}
// Remove condition.
return this.Name.Contains(name);
}
}
这种情况发生的顺序是否重要?如果删除父项,则内存管理将删除所有子项。