SortedList.IndexOfKey(key) 返回 item.key >= key 的项目的索引

Eug*_*sky 5 .net sortedlist

如果不在列表中,SortedList<TKey, TValue>.IndexOfKey(key)返回 -1 。

这是否意味着如果我想在列表中找到大于或等于key的键的索引,我必须自己实现二进制搜索?还是我忽略了一些开箱即用的东西?

我当然想得到 O(log(n)) 的结果,所以请不要使用 LINQ 迭代和过滤魔法。

(一般来说,我想要像 Java 的 NavigableMap 功能,即在排序的地图/字典上进行高效迭代等功能,但就目前而言,上述问题的答案就足够了,我可以按照自己的方式“扩展方法”从那里以某种方式)

Luk*_*keH 2

恐怕你不走运,没有任何内置的东西。

如果您为其创建二分搜索扩展方法,IList<T>则可以针对该Keys属性使用它。这有点烦人,但不太困难。

(框架的内置二分搜索方法使用的约定 -ArrayList<T>- 是在未找到下一个元素时返回下一个元素索引的按位补码。)

int index = yourSortedList.Keys.YourBinarySearchExtensionMethod(key);
if (index >= 0)
{
    // key found
}
else
{
    // key not found
}
Run Code Online (Sandbox Code Playgroud)