如何在
SortedSet
中以指定的索引(位置)访问该项目?
与SortedList
不同,SortedSet不提供Item
property!
(与SortedList不同,SortedSet强制其每个成员都是唯一的,也就是说,一个SortedSet保证不包含重复!)
解决方法
那是因为一个
SortedSet
has the semantics of a set并不是一个List-like的结构.因此,它不实现IList(它使您能够通过Item属性通过索引来处理项目).
如@DavidRR所述,您可以使用Linq扩展方法Enumerable.ElementAt()
.但是,由于SortedSet的后备存储是红黑树 – 高度平衡的二叉树,通过ElementAt()通过索引访问元素涉及到树步行 – O(N),最差情况和O(N / 2)平均,以达到所需的项目.与遍历单链列表访问第N个项目完全相同.
所以对于大套,性能可能很差.
如果你想要的是一个独特的集合,提供类似于数组的语义,为什么不滚动你自己的IList< T>将执行唯一性的实现,就像SorteSet< T>是(忽略了在colleciton中已经存在的元素的添加).使用列表< T>作为后备店.按照排序顺序进行维护,以便您可以使用二进制搜索来确定要添加的元素是否已经存在.或者,简单地是子类型List< T>并覆盖适当的方法来获取所需的语义.