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

如何无需迭代从IEnumerable中筛选匹配ID的元素集合

简化筛选匹配ID的Personel对象的写法

你可以用**LINQ(Language Integrated Query)**来大幅简化代码,同时还能优化性能:

优化后的代码

如果你的personelIEn是泛型的IEnumerable<Personel>:

List<int> pIds = ....// 存储指定的人员ID
IEnumerable<Personel> personelIEn = ....// 存储Personel数据

// 转成HashSet提升ID查找性能
HashSet<int> pIdSet = new HashSet<int>(pIds);
// 筛选并生成结果列表
List<Personel> personelByTag = personelIEn
    .Where(personel => pIdSet.Contains(personel.DocumentID))
    .ToList();

return personelByTag;

如果personelIEn是非泛型的IEnumerable,需要先做类型转换:

List<int> pIds = ....
IEnumerable personelIEn = ....

HashSet<int> pIdSet = new HashSet<int>(pIds);
List<Personel> personelByTag = personelIEn
    .Cast<Personel>()
    .Where(personel => pIdSet.Contains(personel.DocumentID))
    .ToList();

return personelByTag;

为什么这更好?

  1. 写法简洁:用Where方法替代手动foreach循环,逻辑一目了然,代码量减少一半以上
  2. 性能更优:将List<int>转为HashSet<int>是核心优化——List.Contains()是线性查找(时间复杂度O(n)),而HashSet.Contains()是哈希查找(时间复杂度O(1)),当ID列表元素较多时,性能提升会非常显著
  3. 减少内存开销:不需要先把personelIEn转成List再循环,直接在原IEnumerable上操作,避免不必要的内存分配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:06:12