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

C#如何筛选包含另一数组元素的数组项?多值Contains使用问题

筛选包含任意指定后缀的文件数组项

为什么你的Intersect方法无效

你用files.Intersect(filters).Any()得不到正确结果的原因很直接:Intersect是用来找两个数组中完全相等的元素。你的files里是完整文件名(比如"1.mp3"),而filters是纯后缀(比如".mp3"),两者没有完全匹配的项,所以Intersect返回空集合,Any()会返回false——如果你的代码是把这个结果作为筛选条件,逻辑写反就会导致返回所有文件。

正确的实现方式

方式1:用Array.FindAll结合多值判断

直接在Array.FindAll的筛选委托里,检查当前文件是否包含filters中的任意一个后缀:

string[] filtered = Array.FindAll(files, file => filters.Any(filter => file.Contains(filter)));

方式2:用LINQ的Where(更灵活)

如果项目引用了System.Linq,可以用Where配合Any,并且推荐用EndsWith替代Contains——因为后缀是在文件名末尾的,Contains可能误匹配文件名中间出现后缀的情况(比如"audio.mp3.txt"),EndsWith更严谨:

using System.Linq;

string[] filtered = files.Where(file => filters.Any(filter => file.EndsWith(filter))).ToArray();

性能优化(针对大数据量)

如果files或filters数组很大,可以把filters转成HashSet来提升判断效率:

using System.Collections.Generic;

var filterSet = new HashSet<string>(filters);
string[] filtered = Array.FindAll(files, file => filterSet.Any(filter => file.EndsWith(filter)));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:15:38