You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ObservableCollection列中获取次高整数值(已有最高值获取代码)

获取ObservableCollection中次高整数值的极简方案

嘿,针对你的需求,这里有两种极简实现方式,分别对应不同的业务场景,代码量都非常少:

场景1:允许次高值与最高分相同(存在并列第一时,取第二个“第一”)

如果你的业务里,当有多个玩家拿到最高分,次高值可以是同一个最高分,用排序跳过第一个的方式最直接:

int secondHighScore = dataAccess.GamePlayers
    .OrderByDescending(t => t.TotalScore)
    .Skip(1)
    .FirstOrDefault()?
    .TotalScore ?? default;

注:?.和?? default是为了处理集合元素不足2个的边界情况,避免空引用异常,如果你能确保集合至少有2个元素,可以简化成:

int secondHighScore = dataAccess.GamePlayers.OrderByDescending(t => t.TotalScore).Skip(1).First().TotalScore;

场景2:次高值必须严格小于最高分(排除所有最高分后取最大值)

如果需要的是真正比最高分低的最高值,不管有多少个并列第一,都取剩下的最大值,可以结合Max和Where:

int maxScore = dataAccess.GamePlayers.Max(t => t.TotalScore);
int secondHighScore = dataAccess.GamePlayers.Where(t => t.TotalScore != maxScore).Max(t => t.TotalScore);

注:同样要注意集合中元素不足2个,或者所有元素分数都相同的情况,这种时候Where后的集合为空,调用Max会抛出异常,你可以根据业务需求添加判断,比如用DefaultIfEmpty:

int secondHighScore = dataAccess.GamePlayers.Where(t => t.TotalScore != maxScore).DefaultIfEmpty().Max(t => t?.TotalScore ?? default);

这两种方案都是基于你现有代码的延伸,几乎没有额外的冗余代码,完全符合“最少代码实现”的要求~

内容的提问来源于stack exchange,提问作者astrox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:17:29