c# - 获取不同最大值的列表
问题描述
我有一堂TopRegion
public string Id { get; set; }
public string Name { get; set; }
public string Year { get; set; }
public decimal? ParticipationPercentage { get; set; }
以及 TopRegion 列表
IList<TopRegion> TopRegions = new List<TopRegion>();
该列表包含 200 多个 TopRegion,其中一些具有相同的年份和不同或相同的 ParticipationPercentage。总共有 14 个独特的年份,我想做的是为每一年填写一个顶级列表。因此,将 1950 年、1960 年、1970 年等年份 ParticipationPercentage 最高的 TopRegion 项放入此列表
IList<TopRegion> TopRegionsByYear = new List<TopRegion>();
解决此问题的最佳方法是什么?我认为它可能与 LINQ 相关,但我的 LINQ 技能对于此操作还不够敏锐
解决方案
您可以使用GroupBy
和OrderByDescending
:
IList<TopRegion> TopRegionsByYear = TopRegions
.GroupBy(tr => tr.Year)
.Select(yg => yg.OrderByDescending(tr => tr.ParticipationPercentage).First())
.ToList()
顺便问一下,为什么是Year
字符串而不是整数?你总是必须解析它,例如,如果你想按时间顺序排列上面的列表:
IList<TopRegion> TopRegionsByYear = TopRegions
.GroupBy(tr => tr.Year)
.Select(yg => yg.OrderByDescending(tr => tr.ParticipationPercentage).First())
.OrderBy(tr => int.Parse(tr.Year))
.ToList()
推荐阅读
- sql - 如何在 Oracle SQL 中将持续时间拆分为每小时间隔?
- amazon-web-services - dns验证的原因是什么?
- sas - 将多个 SAS 数据集写入一张 Excel 工作表
- c - c中的自动分配
- spring-boot - Redisson 的单元测试失败
- swift - 为什么 Koin 在我的 KMM 应用程序中抛出“未捕获的 Kotlin 异常:kotlin.native.IncorrectDereferenceException”?
- reactjs - 如何使用反应测试库模拟将道具传递给子组件的父组件
- jquery - 使用jQuery提取粘贴在textarea中的自定义html元素属性和内容
- r - R : 根据条件用值填充 NaN 或更新一列的值
- sql - 如何将 BigQuery 嵌套记录取消嵌套到多个列中