I have :项目列表.

I need :让项目列表ID删除任何项目,无论其位于何处,都不会浪费大量时间

项目 struct 如下所示,但它不是最终的,如果需要,我可以更改它

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

enter image description here

推荐答案

对于给定的数据 struct ,以下方法最快.将其添加到班级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);
        }
    }
}

如果移除速度如此重要,那么另一个 idea 是使用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;
    }
}

Csharp相关问答推荐

如何将不同类型的扩展参数的javascript函数转换成C#风格?

内部接口和类的DI解析

使用C#HttpClient以多部分形式数据发送带有非ASCII文件名的文件的问题

Amazon SP-API确认发货不设置&Quot;递送服务

使用预定义对象减少Task.Run/Factory.StartNew中的关闭开销

用C#从Word文档中删除重复的节控件和文本内容控件

当前代码Cosmos DB 3.37.1:PartitionKey key key mismatch exception

为基本审计设置Audit.EntityFramework.Core

net中从位图获取坐标和绘制折线

将内置的OrderedEumable&Quot;类设置为内部类有什么好处?

Regex字母数字校验

用C#从XML内部元素中获取特定值

在集成测试中可以在模拟InMemory数据库中设定数据种子

如何在单击按钮后多次异步更新标签

如何在ASP.NET Core 8中获取键控服务词典

NETSDK1201:对于面向.NET 8.0和更高版本的项目,默认情况下,指定RUNTIME标识符将不再生成自包含的应用程序

Windows 10上埃及标准时间的时区偏移不正确

如何查找Span;T&>是否包含相同顺序的其他Span<;T&>

如何在Blazor 8 RC2静态模式下以编程方式导航到另一个页面

当一个窗体关闭而其他窗体隐藏时,线程不会退出