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

下面的代码用于导入浏览器书签-在这里,我向Link对象的List(this._MyLinks)添加了一堆书签,然后对最终List进行排序-我认为在给定的情况下这是最好的。

    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();


从性能角度(或只是一般而言)将项目直接插入指定位置会更好吗?如果是这样,您会对我如何做到这一点有建议吗?

谢谢!

最佳答案

由于您需要一组排序的数据,因此应该使用更合适的数据结构,尤其是排序的数据结构,而不是使用每次都重新排序的非排序数据结构,否则会迫使您无效率地将项目添加到中间列表中。

SortedSet是专门为有效维护一组排序的数据而设计的。

关于c# - C#列表排序与插入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31991175/

10-17 01:37