c#列表排序与插入

本文关键字:插入 排序 列表 | 更新日期: 2023-09-27 18:07:58

我有一个对象列表,我在整个代码中以及当用户与程序交互时对其进行多次排序。我想知道是否将新项目插入列表中,而不是将其添加到列表的末尾并使用整个列表。

下面的代码是用于导入浏览器书签-这里我添加了一堆书签到列表(this. _mylinks),这是链接对象,然后排序最后的列表-我认为这可能是最好的在这个给定的场景....

    public void ImportBookmarks(string importFile)
    {         
        using (var file = File.OpenRead(importFile))
        {
            var reader = new NetscapeBookmarksReader();
            var bookmarks = reader.Read(file);               
            foreach (var b in bookmarks.AllLinks)
            {
                bool duplicate = this._MyLinks.Any(link => link._URL == b.Url);
                if(duplicate)
                {
                    continue;
                }
                Link bookmark = new Link();
                bookmark._URL = b.Url;
                bookmark._SiteName = b.Title;
                bookmark.BrowserPath = "";
                bookmark.BrowserName = "";
                if (bookmark.AddToConfig(true))
                {
                    this._MyLinks.Add(bookmark);
                }
            }
        }
        this._MyLinks = this._MyLinks.OrderBy(o => o._SiteName).ToList();
    }

现在用户还可以选择添加自己的链接(一次一个)。每当用户添加一个链接时,整个列表再次使用

排序。
this._MyLinks = this._MyLinks.OrderBy(o => o._SiteName).ToList();

从性能的角度来看(或者一般来说)直接将项目插入到指定的位置是更好的吗?如果是这样,你有什么建议吗?

谢谢!

c#列表排序与插入

因为您想要一个排序的数据集,所以您应该使用更合适的数据结构,特别是排序的数据结构,而不是使用每次都要重新排序的未排序的数据结构,或者迫使您低效地将项添加到列表的中间。

SortedSet是专门为高效地维护已排序的数据集而设计的。