簡體   English   中英

在字典C#中查找最接近給定值的值

[英]Find closest value to a given value in a dictionary c#

我有一個字典,我想找出哪個“鍵”值最接近給定值,這是我的下面的字典。

Dictionary<double, int> dictionary = new Dictionary<double, int>();

dictionary.Add(2.4, 5000);
dictionary.Add(6, 2000);
dictionary.Add(12, 1000);
dictionary.Add(24, 500);
dictionary.Add(60, 200);
dictionary.Add(120, 100);
dictionary.Add(240, 50);
dictionary.Add(600, 20);
dictionary.Add(1200, 10);
dictionary.Add(2400, 5);
dictionary.Add(6000, 2);
dictionary.Add(12000, 1);

givenValue = 1;

因此,我想找出最接近1的鍵。我需要返回鍵值對,因此應該返回[2.4,5000]。

好吧,您可能會問自己,字典是否是解決這些類型問題的正確結構,但是假設這是給定的(以解決其他問題),則可以執行以下操作:

var bestMatch = dictionary.OrderBy(e => Math.Abs(e.Key - givenValue)).FirstOrDefault();

但是,如果您需要執行許多此類查詢,則效率將非常低下。

以下是更有效的方法:

Tuple<double, KeyValuePair<double, int>> bestMatch = null;
foreach (var e in dictionary)
{
    var dif = Math.Abs(e.Key - givenValue);
    if (bestMatch == null || dif < bestMatch.Item1)
        bestMatch = Tuple.Create(dif, e);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM