我在C#中有一个名为List<Leaf>
的{{1}}。 A Leaf具有以下属性:
items
如果Leaf具有public class Leaf
{
public int ID { get; set; }
public int ParentID { get; set; }
public bool IsFlagged { get; set; }
}
属性集,那么我需要将其从项集合中删除。另外,我需要删除所有Leaf实体的子项。我正在试图找出编写此代码的最优雅方式。目前,我在一个循环中有一个循环,但它似乎很草率。
有没有人知道这样做的优雅方法?
答案 0 :(得分:0)
处理树的最合理(也可能是“最优雅”)的方法是将其存储为树,而不是数组/列表。在这种情况下,你不需要处理步行元素来试图找到所有孩子。
请注意,根据您的实际需求,树可能不是最佳数据结构,但是对于删除具有所有子节点的节点,将难以击败常规树。
答案 1 :(得分:0)
也许:
void RemoveItAndChildren(Leaf leaf)
{
foreach (Leaf item in items)
if (item.ParentID == leaf.ID)
RemoveItAndChildren(item);
items.Remove(leaf);
}
并使用:
foreach (Leaf leaf in items)
if (leaf.IsFlagged)
RemoveItAndChildren(leaf);
注意,就像上面的评论一样,以下内容可能更合适:
public class Leaf2
{
List<Leaf2> Children;
bool IsFlagged { get; set; }
}