解决方案
你大多只是描述了 SortedDictionary<T, U>
, ,除了下一个最低值/下一个最高值二分搜索,您可以自己实现,没有太大困难。
有没有具体的原因 SortedDictionary
对你来说不够吗?
其他提示
从 C5 集合库中提取 TreeSet。
这正是 PowerCollections 中的 OrderedDictionary。它与 SortedDictionary(带有泛型的红黑树)几乎相同,并添加了设置开始键/结束键并扫描该范围内的所有值的功能。
SortedDicionary 只允许公开从集合开头开始的 GetEnumerator() 函数,并且只允许 MoveNext() 调用,因此即使您使用 LINQ,也不会发生任何神奇的事情:它从头开始,按顺序在每个节点上运行表达式,直到找到与 LINQ 表达式匹配的表达式。
OrderedDictionary 有一个函数,可以在特定键处或之前获取枚举器,并在 O(log n) 中进行查找。
但请注意:PowerCollections OrderedDictionary 中的枚举器是使用“yield”实现的,内存使用和枚举性能至少为 O(n^2)...您可以自己更改实现,使其实现传统的枚举器,这两个问题都会消失。如果我有时间的话,我会将该补丁提交给 Codeplex。
不隶属于 StackOverflow