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

如何用LINQ查询列表中含指定整数出现n次的TestObj对象

解决方案

没问题,这事儿其实挺容易搞定的,咱们用LINQ的FirstOrDefault配合计数逻辑就能实现你要的效果——找到第一个Ints列表里指定整数x恰好出现n次的TestObj,没有符合条件的就返回null。

基础实现代码

先贴出完整的可运行代码示例,方便你直接参考:

// 你的TestObj类定义
public class TestObj 
{ 
    public List<int> Ints; 
}

// 假设你已经有了目标集合ListOfTestObjs,以及要匹配的x和n值
int targetX = 3; // 你要找的整数
int targetCount = 2; // 要求的出现次数

TestObj matchedObj = ListOfTestObjs.FirstOrDefault(obj => 
    obj.Ints != null && obj.Ints.Count(num => num == targetX) == targetCount);

关键细节说明

  • FirstOrDefault本身就完美契合你的需求:它会返回第一个满足条件的对象,如果没有任何符合条件的元素,自动返回null(因为TestObj是引用类型)。
  • 我们加了obj.Ints != null的判断,避免当某个TestObj的Ints字段为null时,调用Count方法触发空引用异常。
  • 如果你想把Ints为null的情况当作“出现0次”(比如当targetCount=0时,要匹配这类对象),可以把判断逻辑改成这样:
    TestObj matchedObj = ListOfTestObjs.FirstOrDefault(obj => 
        (obj.Ints?.Count(num => num == targetX) ?? 0) == targetCount);
    
    这里用了C#的空传播运算符?.和空合并运算符??,如果Ints是null,就会用0来代替计数结果,再和目标次数比较。

性能优化小技巧

如果你的Ints列表特别大,反复调用Count可能会有点性能开销。这种情况下,可以先把每个对象的计数提前算好,再筛选:

var matchedObj = ListOfTestObjs
    .Select(obj => new 
    { 
        Obj = obj, 
        XCount = obj.Ints?.Count(num => num == targetX) ?? 0 
    })
    .FirstOrDefault(item => item.XCount == targetCount)?.Obj;

这样每个Ints列表只会被遍历计数一次,效率会更高一些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:51:39