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

如何实现获取含最高非重复Score的MyObj对象?

实现获取含最高唯一分数的MyObj方法

现有C#类定义

public class MyObj
{
    public string Id { get; set; }
    public List<MyOtherObj> OtherObject { get; set; }

    public class MyOtherObj
    {
        public int Score { get; set; }
    }
}

待实现方法

public MyObj GetHighestScoreThatIsNotDuplicated(IEnumerable<MyObj> myObjs)
{
    //待实现逻辑
    return new MyObj();
}

需求说明

  • 输入示例1:MyObj1(Id=1,Score列表:5,4,3,2,1)、MyObj2(Id=2,Score列表:10,5,4,3,2),应返回MyObj2,因其包含最高的非重复Score值10。
  • 输入示例2:MyObj1(Id=1,Score列表:5,4,3,1)、MyObj2(Id=2,Score列表:5,4,3,2,1)、MyObj3(Id=3,Score列表:5,4,3,1),应返回MyObj2,因其包含唯一的Score值2。

实现方案

不需要递归,用LINQ就能写出简洁高效的逻辑,核心步骤如下:

  1. 统计所有分数的出现频次;
  2. 筛选出仅出现一次的分数,找到其中最高的那个;
  3. 定位到包含该最高唯一分数的MyObj对象。

完整实现代码:

public MyObj GetHighestScoreThatIsNotDuplicated(IEnumerable<MyObj> myObjs)
{
    // 收集所有分数并统计出现次数
    var scoreCounts = myObjs
        .SelectMany(obj => obj.OtherObject?.Select(o => o.Score) ?? Enumerable.Empty<int>())
        .GroupBy(score => score)
        .ToDictionary(group => group.Key, group => group.Count());

    // 找到最高的唯一分数
    var highestUniqueScore = scoreCounts
        .Where(kv => kv.Value == 1)
        .OrderByDescending(kv => kv.Key)
        .Select(kv => kv.Key)
        .FirstOrDefault();

    // 返回包含该分数的MyObj,无符合条件时返回null
    return myObjs.FirstOrDefault(obj => 
        obj.OtherObject?.Any(o => o.Score == highestUniqueScore) == true);
}

补充说明

  • 代码中加入了空引用保护,避免因OtherObject为null引发异常;
  • 如果不存在任何唯一分数,方法会返回null,可根据实际需求调整返回逻辑(比如返回默认实例或抛出异常)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:01:00