如何从字典中获取MAX值?

时间:2012-04-24 02:02:59

标签: c# .net linq dictionary

我有

Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>();

如何获得Guid值为MAX的广告?

8 个答案:

答案 0 :(得分:47)

由于这是公认的答案,我将尝试涵盖问题的所有可能含义:

var dict = new Dictionary<string, int> { { "b", 3 }, { "a", 4 } };

// greatest key
var maxKey = dict.Keys.Max(); // "b"

// greatest value
var maxValue = dict.Values.Max(); // 4

// key of the greatest value
// 4 is the greatest value, and its key is "a", so "a" is the answer.
var keyOfMaxValue = dict.Aggregate((x, y) => x.Value > y.Value ? x : y).Key; // "a"

注意:问题的关键字类型为System.Guid。询问“什么是最大的GUID”可能没有意义,因为它们只是旨在成为独特的价值,而不是代表任何可订购的概念。尽管如此,上述代码适用于支持>运算符的任何类型,此处选择stringint以简洁明了。

答案 1 :(得分:40)

这很有效。它将返回MAX日期的GUID。

Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>(); 
var guidForMaxDate = d.FirstOrDefault(x => x.Value == d.Values.Max()).Key;

答案 2 :(得分:10)

            var maxGuid = Guid.Empty;
            var maxDateTime = DateTime.MinValue;
            foreach (var kvp in d)
            {
                if (kvp.Value > maxDateTime)
                {
                    maxGuid = kvp.Key;
                    maxDateTime = kvp.Value;
                }
            }
            Console.WriteLine("Guid of max date is: " + maxGuid.ToString());

答案 3 :(得分:6)

首先排序您的数据可能是一个解决方案。

var maxGuid = d.OrderByDescending(x => x.Value).FirstOrDefault().Key;

答案 4 :(得分:5)

Guid实现了IComparable,所以:

d.Keys.Max()

还不清楚为什么会这样做......

答案 5 :(得分:2)

在字典上使用LINQ。

var MaximumValue = dict.FirstOrDefault(x => x.Value.Equals(dict.Values.Max()));

答案 6 :(得分:0)

另一种方法可能有助于获得Single KeyValuePair。

KeyValuePair<char, int> GuidKeyPair = guidDict.FirstOrDefault( MaxGuid => MaxGuid.Value == guidDict.Values.Max());

答案 7 :(得分:0)

接受的答案对我不起作用。以下代码(使用MoreLinq)完成了这项工作:

var fooDict = new Dictionary<string, int>();
var keyForBiggest = fooDict.MaxBy(kvp => kvp.Value).Key;
var biggestInt = fooDict[keyForBiggest];