从多级列表中的任何位置删除对象(绕过图算法搜索)

Remove an object from any place in a multilevel list ( Bypass searching on graph algorithm )

我有 : 项目列表。 此列表中的每个项目都可以有自己的具有相同结构的列表。 此列表的深度可以有条件地不受限制。

我需要:让项目 ID 列表删除任何项目,而不会浪费大量时间 我知道如何实现图搜索算法,我需要一个可以绕过简单枚举的解决方案。

项目结构看起来像这样,但它不是最终的,如果需要我可以更改它

public class NavigationPath
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }
    public List<NavigationPath> Childs { get; set; }
}

对于您给定的数据结构,以下方法是最快的。将它添加到您的 class NavigationPath

public void Remove(int id)
{
    for (int i = 0; i < Childs.Count; i++)
    {
        if (Childs[i].Id == id)
        {
            Childs.RemoveAt(i);
            i--;
        }
        else
        {
            Childs[i].Remove(id);
        }
    }
}

如果删除速度那么重要,那么另一个想法是使用 LinkedList<> 而不是 List<>,因此

public LinkedList<NavigationPath> Childs { get; set; }

然后删除代码将是

public void Remove(int id)
{
    var first = Childs.First;
    while (first != null)
    {
        var next = first.Next;
        if (first.Value.Id == id)
        {
            first.List.Remove(first);
        }
        else
        {
            first.Value.Remove(id);
        }
        first = next;
    }
}