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

如何在C#中使用List<int>筛选List<List<int>>集合?

解决方法

你的问题出在Where条件的返回值类型不匹配:内层的x.Where(y => ends.Contains(y))返回的是一个IEnumerable<int>,而外层paths.Where()需要的是**布尔值(bool)**来判断是否保留当前项。

正确的做法是使用Any()方法,它会检查序列中是否存在满足条件的元素,并返回布尔值,完全符合Where的要求:

List<List<int>> paths = new List<List<int>>();
paths.Add(new List<int>() { 0,1 });
paths.Add(new List<int>() { 0, 2 });
paths.Add(new List<int>() { 0, 4 });
paths.Add(new List<int>() { 1, 2 });
paths.Add(new List<int>() { 0, 3 });

List<int> ends = new List<int>(){3,4};

// 正确的筛选代码
var filteredPaths = paths.Where(x => x.Any(y => ends.Contains(y))).ToList();

// 输出验证结果
foreach (var path in filteredPaths)
{
    Console.WriteLine($"{{{string.Join(",", path)}}}");
}

运行后输出结果与预期一致:

{0,4}
{0,3}

如果ends中的元素数量较多,建议把它转换成HashSet<int>来优化查询效率——HashSet.Contains()的时间复杂度是O(1),比List.Contains()的O(n)更高效:

HashSet<int> endsSet = new HashSet<int>(ends);
var filteredPaths = paths.Where(x => x.Any(y => endsSet.Contains(y))).ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:45:41