在SortedDictionary中查找最接近的值

时间:2013-12-09 15:57:50

标签: c# collections dictionary sorteddictionary

我有一个SortedDictionary

 SortedDictionary<int, CPUOptimizationObject> myDict;

现在我想找到X以上的第一个值。 我可以做这样的事情

foreach (var iKey in MyDict.Keys)
{
   if (iKey >= thresholdKey)
   {
       foundKey = iKey;
       break;
   }
}

但这不是很好的表现。
有什么更好的建议吗? (在集合中有一种方法,比如二进制搜索SortedDictionary吗?)

4 个答案:

答案 0 :(得分:4)

虽然理论上,找到大于给定值的最小项是可以在二叉搜索树上有效执行的操作(SortedDictionary实现为SortedDictionary {{1}} }不公开您在该数据类型上执行此类搜索的方法。

您需要使用二进制搜索树的不同实现,以便有效地执行此类搜索,同时仍使用相同类型的数据结构。没有合适的.NET类型;你需要使用第三方实现(其中有很多实现)。

答案 1 :(得分:0)

如果速度更快,你可以试试。但我想只有你多次执行搜索才会更快。

var keys = new List<int>(myDict.Keys);
int index = keys.BinarySearch(thresholdKey);

答案 2 :(得分:0)

使用Sorteddictionary上的.toList()创建临时列表n 现在,因为这会产生一个List n 你可以做到

  n.Find(item =>item >20)

检索匹配的第一个键,

答案 3 :(得分:-1)

我不知道这是否有比foreach更好的性能,但这应该有效:

var foo = myDict.FirstOrDefault(i => i.Key > thresholdKey);