C#递归删除节点
C# Recursive delete nodes
我为分层数据创建了一个 class。从这个 class 我生成自定义树视图。在将数据发送到树视图之前,我需要删除一个不以实例结尾的分支,其中 HaveData = true
public class Data
{
public List<Data> Children
{
get;
set;
}
public bool HaveData
{
get;
set;
}
}
之前的树视图:
1 First
1.1 Item
1.1.1 Item (HaveData = false)
1.2 Item
1.2.1 Item (HaveData = true)
...
我需要:
1 First
1.2 Item
1.2.1 Item (HaveData = true)
...
如何遍历所有节点并仅删除以 HaveData = false 结尾的节点?
谢谢。
如果元素有数据或其任何子元素有数据,则使 HaveData 为真。
删除树中 HaveData 为假的任何节点。
???
利润。
这是一种递归的方法:
public void DeleteBranchWithNoData()
{
var toBeRemoved = new List<Data>();
foreach(var child in Children)
{
if(!child.HaveData && (child.Children == null || !child.Children.Any()))
{
toBeRemoved.Add(child);
}
else
{
child.DeleteBranchWithNoData();
}
}
Children.RemoveAll(d => toBeRemoved.Contains(d));
}
从要删除的分支的顶层节点调用此方法。
我为分层数据创建了一个 class。从这个 class 我生成自定义树视图。在将数据发送到树视图之前,我需要删除一个不以实例结尾的分支,其中 HaveData = true
public class Data
{
public List<Data> Children
{
get;
set;
}
public bool HaveData
{
get;
set;
}
}
之前的树视图:
1 First
1.1 Item
1.1.1 Item (HaveData = false)
1.2 Item
1.2.1 Item (HaveData = true)
...
我需要:
1 First
1.2 Item
1.2.1 Item (HaveData = true)
...
如何遍历所有节点并仅删除以 HaveData = false 结尾的节点? 谢谢。
如果元素有数据或其任何子元素有数据,则使 HaveData 为真。
删除树中 HaveData 为假的任何节点。
???
利润。
这是一种递归的方法:
public void DeleteBranchWithNoData()
{
var toBeRemoved = new List<Data>();
foreach(var child in Children)
{
if(!child.HaveData && (child.Children == null || !child.Children.Any()))
{
toBeRemoved.Add(child);
}
else
{
child.DeleteBranchWithNoData();
}
}
Children.RemoveAll(d => toBeRemoved.Contains(d));
}
从要删除的分支的顶层节点调用此方法。