我有一个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查询,但无法弄清楚语法.任何帮助?
我假设你通过max(int)你的意思是"max",就像所有的每个唯一A的最大双倍一样A_Lists,它实际上似乎是字典.
无论如何,您可以在一个LINQ语句中分三步执行此操作:
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迭代器.