C#列表排序与插入

时间:2015-08-13 14:32:17

标签: c# sorting

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

下面的代码用于导入浏览器书签 - 在这里我向List(this._MyLinks)添加了一堆书签,这些书签是Link对象,然后对最终的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();

从绩效角度(或一般情况下)将项目直接插入指定位置是否更好?如果是这样,你会就我如何做到这一点提出建议吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

由于您需要一组有序数据,因此您应该使用更合适的数据结构,特别是排序数据结构,而不是使用每次重新排序的未排序数据结构,或者强制您无效地添加项目到列表中间。

SortedSet专门用于有效维护一组有序的数据。