如何从列表中获取最大值,但如果有2个或更多相同的值记录则获取所有值

时间:2016-06-08 14:12:41

标签: c# linq

我有一个关键字和值的列表: -

Key Value
21   2
23   1
24   2

我想要最大值记录,我可以在linq中获得max(x => x.value),但在我的情况下,21和24都有最大值,在这种情况下意味着当有2或者更多的键具有相同的最大值然后我想要所有这些我如何获得预期的结果。

请给我提示或想法。

此致 vinit Patel

3 个答案:

答案 0 :(得分:1)

如果您有这样的列表:

List<KeyValuePair<int, int>> keyValues = ...

您可以按值进行分组,然后选择具有最大键的组:

var keys = keyValues.GroupBy(kv => kv.Value)
                    .OrderByDescending(g => g.Key)
                    .FirstOrDefault()
                    .Select(kv => kv.Key);

答案 1 :(得分:0)

你可以这样做。

 var keyvalue = list.GroupBy(x => x.Value)             // Group on value
                    .OrderByDescending(x => x.Key)     // Order the group and 
                    .First()                           // Take first item in a group 
                    .OrderByDescending(x=>x.Key)       // Sort and get max Key,value combination.  
                    .FirstOrDefault();

选中此Demo

答案 2 :(得分:0)

这是另一种方法:

var entries = new Dictionary<int, int>()
{
    {21, 2},
    {23, 1},
    {24, 2}
};

// First we select the max value.
int maxValue = entries.Max(kvp => kvp.Value);

// Or you can select the max value in this simpler way.
maxValue = entries.Values.Max();

// Then we select entries that have the max value.
var maxEntries =
    entries
        .Where(kvp => kvp.Value == maxValue)
        .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);