我有一个对象列表,我在整个代码中以及用户与程序交互时多次排序。我想知道在列表中插入新项目是否更好,而不是添加到列表的末尾并使用整个列表。
下面的代码用于导入浏览器书签 - 在这里我向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();
从绩效角度(或一般情况下)将项目直接插入指定位置是否更好?如果是这样,你会就我如何做到这一点提出建议吗?
谢谢!
答案 0 :(得分:3)
由于您需要一组有序数据,因此您应该使用更合适的数据结构,特别是排序数据结构,而不是使用每次重新排序的未排序数据结构,或者强制您无效地添加项目到列表中间。
SortedSet
专门用于有效维护一组有序的数据。