如何检测数组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,只要有一个子串满足条件就返回truestr.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
相关产品推荐
相关产品推荐

