0

我在 C# 中有一个List<Leaf>命名。items叶具有以下属性:

public class Leaf
{
  public int ID { get; set; }

  public int ParentID { get; set; }

  public bool IsFlagged { get; set; }
}

如果 Leaf 具有IsFlagged属性集,那么我需要将其从项目集合中删除。此外,我需要删除该 Leaf 实体的所有子级。我试图找出编写这段代码的最优雅的方式。目前,我在一个循环中有一个循环,但它看起来很草率。

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

4

2 回答 2

0

处理树的最合理(并且可能是“最优雅”)的方式是将其存储为树,而不是数组/列表。在这种情况下,您不需要处理步行元素来尝试找到所有孩子。

请注意,根据您的实际需求,树可能不是最好的数据结构,但是要删除具有所有子节点的节点,很难击败常规树。

于 2013-02-18T21:34:33.740 回答
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; }
}
于 2013-02-18T21:37:52.717 回答