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

如何利用int数组构建LINQ条件筛选目标数组元素?

筛选第二个数组中存在于第一个数组的元素

需求

我有两个int类型数组,希望仅保留第二个数组中存在于第一个数组内的元素。

示例代码

int[] first = new int[2] { 1, 2 };
int[] second = new int[5] { 99, 1, 2, 97, 95 };

错误尝试及问题

我试过以下写法,但无法满足需求:

foreach(int x in first){
    second.Where(s=>s==x);
}

这段代码只是循环遍历第一个数组的元素,每次单独筛选出等于当前x的元素,但既没有合并结果,也没实现正确的匹配逻辑——你需要的是判断元素是否存在于第一个数组的任意元素中,而非同时等于所有元素。

正确的LINQ实现

基础写法(使用Contains)

直接用Contains方法判断元素是否在第一个数组中,封装了你需要的“或”逻辑(相当于s == first[0] || s == first[1] || ...):

var filteredArray = second.Where(s => first.Contains(s)).ToArray();

执行后filteredArray的结果是{1, 2},符合预期。

优化写法(适合大数据量)

如果第一个数组元素较多,先把它转成HashSet<int>可以大幅提升查找效率(HashSet的Contains是O(1)时间复杂度,数组的Contains是O(n)):

var firstHashSet = new HashSet<int>(first);
var filteredArray = second.Where(s => firstHashSet.Contains(s)).ToArray();

补充说明

你之前构想的s==x[0] && s==x[1] && ...逻辑本身是错误的——一个整数不可能同时等于多个不同的数,这种条件只会返回空结果(除非第一个数组所有元素完全相同)。正确的逻辑应该是“或”判断,而Contains正好帮我们实现了这一点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:31:35