在
各位 - 请再次阅读问题。我不需要一个返回已存在键的函数。我关心的是没有精确匹配的情况。
我对 O(log n) 时间感兴趣。这意味着我不会在 foreach 循环中遇到问题,而是希望有一种高效的方法来完成这个任务。
我已经进行了一些测试。
Linq 语句既没有被编译器优化,也没有被运行时机器优化,因此它们会遍历所有集合元素,并且速度很慢,即 O(n)。根据 Mehrdad Afshari 的答案,这里有一个二分查找可以在 Keys 集合上以 O(log n) 的时间运行:
SortedList<K ,V>
上是否有一个 Lower Bound 函数?该函数应返回第一个大于或等于指定键的元素。是否有其他支持此功能的类?各位 - 请再次阅读问题。我不需要一个返回已存在键的函数。我关心的是没有精确匹配的情况。
我对 O(log n) 时间感兴趣。这意味着我不会在 foreach 循环中遇到问题,而是希望有一种高效的方法来完成这个任务。
我已经进行了一些测试。
Linq 语句既没有被编译器优化,也没有被运行时机器优化,因此它们会遍历所有集合元素,并且速度很慢,即 O(n)。根据 Mehrdad Afshari 的答案,这里有一个二分查找可以在 Keys 集合上以 O(log n) 的时间运行:
public static int FindFirstIndexGreaterThanOrEqualTo<T>(
this IList<T> sortedCollection, T key
) where T : IComparable<T> {
int begin = 0;
int end = sortedCollection.Count;
while (end > begin) {
int index = (begin + end) / 2;
T el = sortedCollection[index];
if (el.CompareTo(key) >= 0)
end = index;
else
begin = index + 1;
}
return end;
}