我已经对集合(List)进行了排序,我需要始终对其进行排序。
我目前正在我的集合中使用List.BinarySearch,然后在正确的位置插入元素。我在每次插入后都尝试过排序列表但性能不可接受。
是否有可以提供更好性能的解决方案?也许我应该使用其他收藏品。
(我知道SortedList,但它仅限于唯一键)
答案 0 :(得分:3)
如果您使用的是.Net 4,则可以使用SortedSet<T>
http://msdn.microsoft.com/en-us/library/dd412070.aspx
对于.Net 3.5及更低版本,请查看SortedList<TKey,TValue>
是否适合您。
答案 1 :(得分:3)
PowerCollections有OrderedBag
类型,可能对您需要的内容有用。来自文档
插入,删除和查找 所有元素都在 log(N)+ M中完成 时间,其中N是键的数量 树,M是当前的数字 正在复制的元素 处理。
但是,对于.NET 3.5内置类型,使用List.BinarySearch
并将每个项目插入正确的位置是一个好的开始 - 但是在内部使用数组,因此您的性能会因为所有复制而降低插入时正在做。
如果您可以将插件分组,这样可以改善操作,但除非您在插入完成后只进行一次排序操作,否则最好使用OrderedBag
中的PowerCollections
如果可以的话。
答案 2 :(得分:1)
尝试将插入聚合为批次,并仅在每批次结束时进行排序。