如何通过MaxBy()获取列表中的全部最大值?
解决方案
要获取所有对应最大值的元素,你可以分两步操作:先找出列表中的最大Total值,再筛选出所有Total等于该最大值的元素。
代码实现
首先修正结构体名称的一致性(原代码中结构体定义为Amounts,调用时用了Amount,这里统一为Amount):
public struct Amount { public string Name; public int Total; }
然后实现核心逻辑:
// 示例数据源 List<Amount> amounts = new List<Amount> { new Amount { Name = "Name1", Total = 31 }, new Amount { Name = "Name2", Total = 35 }, new Amount { Name = "Name3", Total = 33 }, new Amount { Name = "Name4", Total = 35 } }; // 1. 获取列表中的最大Total值 int maxTotal = amounts.Max(x => x.Total); // 2. 筛选所有Total等于最大值的元素 List<Amount> highestAmounts = amounts.Where(x => x.Total == maxTotal).ToList();
链式调用简化写法
也可以将两步合并为一行链式调用:
List<Amount> highestAmounts = amounts.Where(x => x.Total == amounts.Max(y => y.Total)).ToList();
空列表异常处理(可选)
如果列表可能为空,建议先做判断避免抛出异常:
List<Amount> highestAmounts = new List<Amount>(); if (amounts.Any()) { int maxTotal = amounts.Max(x => x.Total); highestAmounts = amounts.Where(x => x.Total == maxTotal).ToList(); }
执行后即可得到所有符合条件的元素:{Name2, 35}和{Name4, 35}。
内容的提问来源于stack exchange,提问作者ToastedProphet
相关产品推荐
相关产品推荐

