我有一个动态列表,它可以是无限子列表。 每个列表都有一个ID,然后它有一个ParentID。
我获得了其中一个列表的ID,我希望通过将具有该ID的所有列表作为ParentID删除层次结构中的所有列表。然后我想要删除所有这些列表并执行相同的操作,直到删除第一个项目的所有子列表。
有没有好办法呢?
答案 0 :(得分:1)
您需要一个递归算法。用语言来说,它可以描述如下:
ID
= x ParentID
= x 假设您有以下类定义:
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