项目列表中每个项目的最大值

Mik*_*keT 1 c# linq

我有一个C类,它有一个List [B],每个B都有一个Dictionary [A,double]

我需要选择目前我正在做的每A最大(双倍):

Dictionary<A,double> rtn = new Dictionary<A,double>();
foreach (var B in C.Bs)
{
    foreach (var kvpA in B.A_list.Where(a => !rtn.Keys.ToList().Contains(a)))
    {
        rtn.Add(kvpA.Key, kvpA.Value);
    }
    foreach(var kvpA in B.A_list.Where(a => rtn.Keys.Contains(a) && a.Value>rtn[a]))
    {
        rtn[kvpA.Key] = kvpA.Value;
    }
}
return rtn;
Run Code Online (Sandbox Code Playgroud)

然而,这看起来相当混乱所以我正在尝试构建一个更好的linq查询,但无法弄清楚语法.任何帮助?

Jos*_*nig 5

我假设你通过max(int)你的意思是"max",就像所有的每个唯一A的最大双倍一样A_Lists,它实际上似乎是字典.

无论如何,您可以在一个LINQ语句中分三步执行此操作:

  1. 使用SelectMany折叠所有键值对
  2. 使用GroupBy按唯一A分组
  3. 使用ToDictionary获取每A键最多两倍

c类的实例在哪里C:

var dct = c.Bs.SelectMany(x => x.A_List)
            .GroupBy(p => p.Key, p => p.Value)
            .ToDictionary(g => g.Key, g => g.Max());
Run Code Online (Sandbox Code Playgroud)

您也可以使用ToLookup代替ToDictionary,这将产生与ToDictionary实现的相同[A, double]元组的IEnumerable迭代器.