gpt4 book ai didi

c# - 项目列表中每个项目的最大值

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:50 26 4
gpt4 key购买 nike

我有一个 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 查询,但无法弄清楚语法。有帮助吗?

最佳答案

我假设您所说的 max(int) 只是指“最大”,因为所有 A_Lists 中每个唯一 A 的最大双倍数,这似乎实际上是字典。

无论如何,您可以在一个 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());

你也可以使用 ToLookup代替 ToDictionary,这将在由 ToDictionary 实现的相同 [A, double] 元组上产生一个 IEnumerable 迭代器。

关于c# - 项目列表中每个项目的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14938531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com