C# SortedSet<T>自定义比较器行为疑问及排序集合选型咨询
问题解答
1. 这是SortedSet的预期行为吗?
是的,这完全是SortedSet的预期行为。
在.NET的SortedSet
文档中提到的“不允许重复元素”,这里的“重复”就是由比较器定义的相等性,而非元素本身的引用或值相等。确实,官方文档在这一点上的描述不够直白,容易让开发者误解比较器仅用于排序而非相等性判断。
2. 符合需求的排序集合推荐
如果你需要一个允许重复元素、同时按指定规则排序的集合,可以根据使用场景选择以下方案:
- SortedList<TKey, List
> :将排序依据的键(比如向量模长)作为TKey,每个键对应一个存储实际元素的List。这种方式可以手动维护有序性,同时容纳相同键的多个元素。需要注意如果元素的键值会动态变化,需要额外处理元素的迁移。 - List
+ 自定义排序 :先将所有元素加入List,之后调用 Sort(IComparer<T>)完成排序;如果需要实时保持有序,可以在添加元素时通过二分查找找到插入位置,直接插入对应索引,避免每次全量排序。 - 第三方OrderedBag
(如PowerCollections库) :这个集合原生支持允许重复元素的有序存储,内部基于比较器维护排序逻辑,行为和SortedSet类似但允许重复,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Wabafet
相关产品推荐
相关产品推荐

