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

如何编写LINQ筛选包含pairs任一子列表所有元素的cases列表?

解决方法

首先明确核心需求:从cases集合里,找出那些包含pairs中任意一个子列表所有元素的列表。

为什么你的代码没效果?

你之前的代码有两个关键问题:

  • 筛选对象搞反了:你在遍历pairs做筛选,但实际要找的是cases里的元素;
  • 逻辑判断完全反了:cases.All(...)要求所有case都包含当前pair,但你需要的是当前case能包含至少一个pair的所有元素。

正确的LINQ写法

基础实现(适合小数据量)

直接按需求逻辑写,容易理解:

var res = cases.Where(caseItem => 
    pairs.Any(pair => pair.All(element => caseItem.Contains(element)))
).ToList();

逻辑拆解:

  • 逐个检查cases里的每个列表(caseItem);
  • 对每个caseItem,看pairs里有没有至少一个子列表(pair),能让这个pair的所有元素都在caseItem里;
  • 符合条件的caseItem就会被保留下来。

性能优化版(适合大数据量)

如果数据规模大,把case转换成HashSet<string>能大幅提升查找效率(HashSet.Contains()是O(1),比List.Contains()的O(n)快很多):

// 先把每个case转成HashSet,避免重复计算
var caseHashSets = cases.Select(c => new HashSet<string>(c)).ToList();

var res = cases.Zip(caseHashSets, (originalCase, hashSet) => new { originalCase, hashSet })
    .Where(item => pairs.Any(pair => pair.All(element => item.hashSet.Contains(element))))
    .Select(item => item.originalCase)
    .ToList();

测试结果

用你给出的测试数据,上面的代码会正确返回cases里的第四个列表:{"u", "c", "b", "w", "z"}——因为它完全包含pairs里的{"u", "z"}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:25:12