微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/csharp/97355.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐