我有一个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;
然而,这看起来相当混乱所以我正在尝试构建一个更好的linq查询,但无法弄清楚语法。有什么帮助吗?
答案 0 :(得分:5)
我假设max(int)你的意思是“max”,就像所有A_Lists
中每个唯一A的最大双倍一样,它实际上是字典。
无论如何,您可以在一个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());
您也可以使用ToLookup代替ToDictionary,这将产生与ToDictionary实现的相同[A, double]
元组的IEnumerable迭代器。