如何在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
相关产品推荐
相关产品推荐

