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();
从性能的角度来看(或者一般来说)直接将项目插入到指定的位置是更好的吗?如果是这样,你有什么建议吗?
谢谢!
因为您想要一个排序的数据集,所以您应该使用更合适的数据结构,特别是排序的数据结构,而不是使用每次都要重新排序的未排序的数据结构,或者迫使您低效地将项添加到列表的中间。
SortedSet
是专门为高效地维护已排序的数据集而设计的。