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

如何过滤List<List<string>>并保留存在于指定列表中的元素

解决C#嵌套列表元素过滤问题

我有如下C#代码:

var l = new List<List<string>>() { {"a","b","c"}, {"d","g","f"} };
var tokeep = new List<string>() { "a","c","d" };

我想要过滤集合l,仅保留每个子列表中存在于tokeep列表里的元素,尝试了以下代码但无法正常运行:

l = l.Where(s => s.Where(s => tokeep.Contains(s)).ToList()).ToList();

期望得到的结果为:l = { {"a","c"}, {"d"} }


你的代码问题出在外层Where的逻辑上:Where方法需要传入返回bool值的判断条件,但你返回的是过滤后的子列表(List<string>类型),这会导致编译错误。

正确的做法是遍历每个子列表,单独过滤其中的元素,再将过滤后的子列表重新组合成新列表,用Select就能实现:

l = l.Select(sublist => sublist.Where(item => tokeep.Contains(item)).ToList()).ToList();

如果需要剔除过滤后为空的子列表(比如某个子列表的元素全不在tokeep中),可以额外加一层Where判断:

l = l.Select(sublist => sublist.Where(item => tokeep.Contains(item)).ToList())
     .Where(filteredList => filteredList.Any())
     .ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:47:14