删除动态列表列表的子项

时间:2015-12-11 08:08:15

标签: c# list

我有一个动态列表,它可以是无限子列表。 每个列表都有一个ID,然后它有一个ParentID。

我获得了其中一个列表的ID,我希望通过将具有该ID的所有列表作为ParentID删除层次结构中的所有列表。然后我想要删除所有这些列表并执行相同的操作,直到删除第一个项目的所有子列表。

有没有好办法呢?

1 个答案:

答案 0 :(得分:1)

您需要一个递归算法。用语言来说,它可以描述如下:

  1. 使用ID = x
  2. 删除项目
  3. 找到所有ParentID = x
  4. 的孩子
  5. 从第1步开始为每个孩子的ID
  6. 重复一次

    假设您有以下类定义:

    public class Item
    {
        public int ID { get; set; }
        public int ParentID { get; set; }
    }
    

    可以使用以下方法完成:

    void RemoveRecursively(List<Item> list, int id)
    {
        list.RemoveAll(x => x.ID == id);
    
        foreach (var removingId in list.Where(x => x.ParentID == id).Select(x => x.ID).ToArray()) 
            RemoveRecursively(list, removingId);
    }
    

    有关递归的一些信息:
    http://www.dotnetperls.com/recursion
    https://msdn.microsoft.com/library/z3dk2cc3(v=vs.100).aspx