c# – 在“SortedSet”中以指定的索引访问项目

如何在 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>并覆盖适当的方法获取所需的语义.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...