我正在尝试通过两个T的属性对容器中的类型T的数据进行排序。这可能是很多数据,所以我宁愿在插入时进行排序。我查看了List
和SortedList
,但两者都没有完全提供我需要的功能。
C#是否提供了一个容器,允许在插入和排序比较函数时进行排序?我想避免像List.Sort
这样的帖子插入排序,并避免将数据用作SortedList
的键和值的开销。
答案 0 :(得分:6)
如果您使用的是.NET 4,则可以将SortedSet
与自定义IComparer<T>
一起使用。缺点是它不允许你有多个相同的元素。你需要吗?
我不清楚为什么你想要对插入进行排序只是因为你有很多数据。在插入之前是否需要对它进行排序?如果没有,我希望在最后(通过List.Sort
)进行单一排序,以便像现在这样排序。
答案 1 :(得分:2)
如果您希望始终保持相同的排序顺序,可以使用SortedList<K,V>
或SortedDictionary<K,V>
并将IComparer<K>
传递给构造函数。
如果您需要在同一容器上使用不同的排序顺序,则可以使用List<T>
并将IComparer<T>
传递给Sort
方法。
由于您可能正在存储引用类型,因此我不会过分担心将项目用作键和值。您只是存储参考文献。
另一种选择是实现自己的二叉树结构。