C# 如何过滤树结构?
我有一个对象树C# 如何过滤树结构?,c#,tree,C#,Tree,我有一个对象树MyNode: public class MyNode { public int Type { get; set; } public List<MyNode> Children { get; set; } } MyNode myRootNode; // initializing a tree structure 我有一个例外:集合被修改;枚举操作可能无法执行。我想这是因为我删除了列表中的元素。有没有正确的方法?或者我做错了什么?假设始终保留根节点,您可以
MyNode
:
public class MyNode
{
public int Type { get; set; }
public List<MyNode> Children { get; set; }
}
MyNode myRootNode;
// initializing a tree structure
我有一个例外:
集合被修改;枚举操作可能无法执行。
我想这是因为我删除了列表中的元素。有没有正确的方法?或者我做错了什么?假设始终保留根节点,您可以删除mathod中的子节点,而不是节点本身
bool Filter(MyNode node,int type)
{
//remove children
foreach(MyNode child in node.Children.Where(c=>!Filter(c, type)).ToArray())
node.Children.Remove(child);
//return if should be retained
return node.Type==type || node.Children.Count>0;
}
林克来救你:
public static void RemoveNodesRecursive(this MyNode node, Predicate<MyNode> predicate)
{
node.Children.RemoveAll(predicate);
foreach (var n in node.Children)
{
RemoveNodes(n);
}
}
您是否确实需要修改just filter的初始集合(选择满足条件的项)?
public static void RemoveNodesRecursive(this MyNode node, Predicate<MyNode> predicate)
{
node.Children.RemoveAll(predicate);
foreach (var n in node.Children)
{
RemoveNodes(n);
}
}
myRootNode.RemoveNodesRecursive(n => n.node.Type == myType)