使用C#删除树枝

时间:2013-02-18 21:28:39

标签: c# tree

我在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实体的子项。我正在试图找出编写此代码的最优雅方式。目前,我在一个循环中有一个循环,但它似乎很草率。

有没有人知道这样做的优雅方法?

2 个答案:

答案 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; }
}