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

如何检测数组Array1的元素是否包含数组Array2中的任意元素?

检测数组元素是否作为子串存在于另一数组元素中

给定两个字符串数组:

string[] array1 = {"1726KB12","271","MB192"};
string[] array2 = {"KB","L1","C9"};

需求是:判断array2中的任意元素是否是array1中某一元素的子串(而非完全相等),例如array2里的"KB"是array1里"1726KB12"的子串,这种情况需要被检测到。

解决方案

1. LINQ 简洁实现

利用LINQ的Any()方法结合字符串的Contains()方法,可快速完成检测:

// 判断是否存在匹配项
bool hasMatchingSubstring = array2.Any(sub => array1.Any(str => str.Contains(sub)));

// 若需要收集所有匹配的子串及其对应的父串
var allMatches = from sub in array2
                 from str in array1
                 where str.Contains(sub)
                 select new { Substring = sub, ParentString = str };
  • array2.Any(...):遍历array2,只要有一个子串满足条件就返回true
  • str.Contains(sub):判断array1中的字符串是否包含当前子串

2. 基础循环实现

如果不想使用LINQ,可通过嵌套循环完成检测:

bool hasMatch = false;
// 遍历array2中的每个子串
foreach (string substr in array2)
{
    // 遍历array1中的每个字符串
    foreach (string str in array1)
    {
        if (str.Contains(substr))
        {
            hasMatch = true;
            // 找到匹配后直接跳出所有循环,提升效率
            goto endCheck;
        }
    }
}
endCheck:

// 收集所有匹配项的版本
List<(string Substring, string ParentString)> matches = new List<(string, string)>();
foreach (string substr in array2)
{
    foreach (string str in array1)
    {
        if (str.Contains(substr))
        {
            matches.Add((substr, str));
        }
    }
}

3. 忽略大小写的检测

如果需要忽略大小写匹配,将str.Contains(substr)替换为:

str.IndexOf(substr, StringComparison.OrdinalIgnoreCase) >= 0

IndexOf()配合StringComparison.OrdinalIgnoreCase可以实现不区分大小写的子串检测。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:52:33