如何使用LINQ查找词典列表中每个键的最大值?

Arg*_*gos 7 c# linq c#-3.0

我有一个字典列表,其中包含字符串类型和值为int的键.

许多词典中都有相同的键,但不是全部.

所以我的问题是:使用LINQ如何在所有字典中找到与每个不同键相关联的最大值?

例如,给出以下输入:

var data = new List<Dictionary<string, int>>
{
    new Dictionary<string, int> {{"alpha", 4}, {"gorilla", 2}, {"gamma", 3}},
    new Dictionary<string, int> {{"alpha", 1}, {"beta", 3}, {"gamma", 1}},
    new Dictionary<string, int> {{"monkey", 2}, {"beta", 2}, {"gamma", 2}},
};
Run Code Online (Sandbox Code Playgroud)

我想要某种包含以下内容的集合:

{"alpha", 4},
{"gorilla", 2},
{"gamma", 3},
{"beta", 3},
{"monkey", 2}
Run Code Online (Sandbox Code Playgroud)

(我现在正在遍历列表并自己跟踪事物,真的只是想知道是否有更好的LINQ式方式)

编辑:我也不知道字符串键是什么提前

Sco*_*vey 10

var results = data.SelectMany(d => d)
                  .GroupBy(d => d.Key)
                  .Select(g => new
{
    GroupName = g.Key,
    MaxValue = g.Max(i => i.Value)
});
Run Code Online (Sandbox Code Playgroud)

并测试以上,使用此

foreach (var item in results)
{
    Console.WriteLine(item);
}
Run Code Online (Sandbox Code Playgroud)

获得以下输出...

{ GroupName = alpha, MaxValue = 4 }
{ GroupName = gorilla, MaxValue = 2 }
{ GroupName = gamma, MaxValue = 3 }
{ GroupName = beta, MaxValue = 3 }
{ GroupName = monkey, MaxValue = 2 }
Run Code Online (Sandbox Code Playgroud)

  • 当然还有许多其他方法可以做同样的事情:`data.SelectMany(d => d).GroupBy(d => d.Key,d => d.Value,(k,i)=> new {GroupName = k,MaxValue = i.Max()})`或`from data in data.SelectMany(i => i)group d.Value by d.Key into g select new {GroupName = g.Key,MaxValue = g.Max()}`是其中两个. (4认同)