c#dictionary获取最小值的关键字

本文关键字:关键字 最小值 获取 c#dictionary | 更新日期: 2023-09-27 18:03:55

今天对你来说可能很简单,但我现在正在兜圈子。考虑这个场景:

var tempDictionary = new Dictionary<string, int>();
tempDictionary.Add("user 1", 5);
tempDictionary.Add("user 2", 3);
tempDictionary.Add("user 3", 5);
Console.WriteLine(tempDictionary.Min(x => x.Key) + " => " tempDictionary.Min(x => x.Value);

以上返回"user 1=>3"。

如何返回字典中值最低的键?我想要的输出应该是这样的:"user2=>3">

有什么想法吗?

c#dictionary获取最小值的关键字

使用morelinq

var keyR = tempDictionary.MinBy(kvp => kvp.Value).Key;

 var min = tempDictionary.Aggregate((l, r) => l.Value < r.Value ? l : r).Key;

来自C#中字典的最高值

var keyAndValue = tempDictionary.OrderBy(kvp => kvp.Value).First();
Console.WriteLine("{0} => {1}", keyAndValue.Key, keyAndValue.Value);

如果数据集的大小不是微不足道的,那么可以考虑在moreLinq中使用MinBy扩展。以下是托管在SO.

上的实现

试试这个:
var val = tempDictionary.OrderBy(k => k.Value).FirstOrDefault(); Console.WriteLine(val.Key +" => "+val.Value);

排序效率较低,因为它需要O(n-logn(,但选择最小值应该只有O(n(。

我认为这是一种更简单的方法:

tempDictionary.Where(e => e.Value == tempDictionary.Min(e2 => e2.Value)).First()

使用它,如果您只删除.First()

,您甚至可以获得所有的最小值

我也遇到了类似的问题,我不喜欢对字典的值进行排序,而是简单地通过一次迭代找到最小值(排序为>O(N((。您可能需要防范角落案件和类似案件。

    var s = String.Empty;
    var min = Int32.MaxValue;
    foreach (var item in tempDictionary) {
        if (item.Value < min){
            s = item.Key;
            min = item.Value;
        }
    }
    Console.WriteLine(s + " => " + min);