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

如何用LINQ基于平行列表B的条件优雅过滤列表A?

基于平行列表的LINQ过滤方案

针对你需要根据平行列表B的对应索引值过滤列表A的需求,这里提供两种优雅的LINQ实现方式,替代原有的for循环:

方法1:使用Zip配对元素(推荐,可读性更高)

Zip方法可以将两个列表中同索引的元素直接配对,之后筛选符合条件的配对并提取A的元素:

List<string> res = A.Zip(B, (a, b) => new { AElement = a, BElement = b })
                    .Where(pair => pair.BElement == someVal)
                    .Select(pair => pair.AElement)
                    .ToList();

逻辑说明:

  • Zip会把A[i]和B[i]组合成一个匿名对象,保证索引严格对应
  • Where筛选出B元素等于目标值的配对
  • Select提取配对中的A元素,最后转成列表

方法2:使用带索引的Select

利用Select的重载同时获取A的元素和其索引,再通过索引访问B的对应元素进行判断:

List<string> res = A.Select((a, i) => new { AElement = a, Index = i })
                    .Where(item => B[item.Index] == someVal)
                    .Select(item => item.AElement)
                    .ToList();

逻辑说明:

  • Select((a, i) => ...)同时拿到A的元素a和它的索引i
  • Where通过索引i获取B[i],判断是否符合条件
  • 最后提取符合条件的A元素转成列表

重要提醒

绝对不要使用IndexOf(x)来获取索引,如果A中存在重复元素,IndexOf只会返回第一个匹配元素的索引,导致对应B的元素判断错误,完全不符合平行列表的索引对应需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:57:16