如果键不在列表中,SortedList<TKey, TValue>.IndexOfKey(key)返回 -1 。
这是否意味着如果我想在列表中找到大于或等于key的键的索引,我必须自己实现二进制搜索?还是我忽略了一些开箱即用的东西?
我当然想得到 O(log(n)) 的结果,所以请不要使用 LINQ 迭代和过滤魔法。
(一般来说,我想要像 Java 的 NavigableMap 功能,即在排序的地图/字典上进行高效迭代等功能,但就目前而言,上述问题的答案就足够了,我可以按照自己的方式“扩展方法”从那里以某种方式)
恐怕你不走运,没有任何内置的东西。
如果您为其创建二分搜索扩展方法,IList<T>则可以针对该Keys属性使用它。这有点烦人,但不太困难。
(框架的内置二分搜索方法使用的约定 -Array和List<T>- 是在未找到下一个元素时返回下一个元素索引的按位补码。)
int index = yourSortedList.Keys.YourBinarySearchExtensionMethod(key);
if (index >= 0)
{
// key found
}
else
{
// key not found
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1108 次 |
| 最近记录: |