【发布时间】:2013-12-26 19:32:57
【问题描述】:
我有一个排序字典
SortedDictionary<int, CPUOptimizationObject> myDict;
现在我想找到 X 以上的第一个值。 我可以做这样的事情
foreach (var iKey in MyDict.Keys)
{
if (iKey >= thresholdKey)
{
foundKey = iKey;
break;
}
}
但这在性能方面并不好。
有更好的建议吗?
(在集合中是否有类似 Binary search for SortedDictionary 的方法?)
【问题讨论】:
-
使用双精度键不是一个好主意。如果您正在寻找最近的匹配项,您在其中存储了什么?为什么要使用 SortedDictionary?您要解决的实际问题是什么?
-
您可以调用 ToList() 然后执行 BinarySearch 或 LINQ。但不确定那是否更快。也许您可以改进您的工程以获得更好的键或其他列表类型,如 Panagiotis 已经说过的。
-
你对双倍的看法是正确的。固定为整数。
-
double 在一段历史代码中,由 3 个字符串翻译而来。在问题中更改了它,但问题仍然存在
-
您不能使用
BinarySearch,因为KeyCollection-class 没有实现IList(作为数组或列表),因此它不允许随机访问。所以我怀疑你是否可以轻松改进它。
标签: c# collections dictionary sorteddictionary