c# - 按 2 个属性聚合列表项并在 C# 中对第 3 个求和
问题描述
我有一个LoggedRestarts
具有三个属性的对象列表Release
:Build
和NumberOfRestarts
。前两个包含许多重复项,第三个属性可能具有不同的值。我想将这些汇总为一个并求和NumberOfRestarts
;与我在 python 中编写的内容相当:df = df.groupby(['Release','Build'], as_index=False)['NumberOfRestarts'].sum()
.
假设我的LoggedRestarts
列表中有这些类型的对象:
Release-----------------Build---------------NumberOfRestarts
(1) 12.21------------------Build1---------------1
(2) 12.21------------------Build1---------------2
我希望它变成这样:
Release-----------------Build---------------NumberOfRestarts
(1) 12.21------------------Build1---------------3
目前我有以下代码,它并没有真正使用,因为仍有未聚合的值。
for (int i = 0; i < loggedRestartsList.Count; i++)
{
if (loggedRestartsList[i].release == loggedRestartsList[i + 1].release
& loggedRestartsList[i].build == loggedRestartsList[i + 1].build)
{
loggedRestartsList[i+1].numberOfRestarts = loggedRestartsList[i].numberOfRestarts + loggedRestartsList[i + 1].numberOfRestarts;
loggedRestartsList.RemoveAt(i);
}
}
我还找到了这样的解决方案:Linq: GroupBy, Sum and Count但我无法解决这个问题。
因此,我怎样才能完成上述工作?
解决方案
您可以使用 LINQ GroupBy
:
List<(string Release, string Build, int NumberOfRestarts)> releaseBuildGroups = loggedRestartsList
.GroupBy(x => (x.Release, x.Build))
.Select(g => (g.Key.Release, g.Key.Build, g.Sum(x => x.NumberOfRestarts)))
.ToList();
除了使用 ValueTuple 之外,您还可以初始化类的新实例。
推荐阅读
- ios - 根据设备大小快速切换背景图像
- c# - Microsoft.TeamFoundation.Build.WebApi.BuildHttpClient UpdateDefinitionAsync - 添加步骤
- r - 数据框每列的累积百分比
- python-3.x - 在 Access 数据库中插入超链接 (pyodbc)
- javascript - 动态创建的按钮无法访问
- html - HTML 标记在 576 像素以下不是 100% 宽度
- postgresql - 使用 spark 从 Postgres 并行读取数据,用于没有整数主键列的表
- spring-boot - Kerberos 客户端 - kerberoRestTemplate 不工作
- python - 按日期合并多个数据框(删除重复项)
- iis - 可以帮我解决 0x80070021 错误吗