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

C#使用LINQ All方法判断集合字符串匹配结果异常问题求解

字符串集合匹配逻辑实现问题

需求说明

需要实现字符串集合匹配判断逻辑:校验待查找字符串列表与对应关键词数组是否匹配,当*关键词数组中的所有文本,都能在待查找列表的任意元素中找到对应匹配(即元素包含该关键词文本)*时,输出对应提示信息。

原有代码问题

原有实现的判断逻辑顺序写反,运行后仅第二个场景触发输出,第一、第三个符合匹配规则的场景未生效,原有错误判断逻辑核心代码如下:

// 错误逻辑示例
if (FirstArrayToLookup.All(x => FirstStringContains.All(y => x.Contains(y))))
    Console.WriteLine("First Array to Lookup");

该逻辑的实际判定规则是:待查找列表中的每一个元素,都必须同时包含所有关键词,和需求完全不符:

  • 第一个场景的待查找列表包含"FirstArray1"、"FirstArray2"两个元素,分别只包含"Array1"、"Array2",没有任何一个元素同时包含两个关键词,因此判定为不匹配
  • 第二个场景的待查找列表仅有一个元素"SecondArray1",刚好包含唯一关键词"Array1",因此可以正常触发输出
  • 第三个场景的待查找列表元素分别只包含一个对应序号的关键词,没有元素同时包含三个关键词,因此判定为不匹配

正确LINQ实现

将判断逻辑调整为:所有关键词,都至少能在待查找列表中找到一个包含该关键词的元素,即调换两层判断的顺序,内层匹配使用Any而非All,修正后完整代码如下:

public static void Main()
{
    List<string> FirstArrayToLookup = new List<string>();
    List<string> SecondArrayToLookup = new List<string>();
    List<string> ThirdArrayToLookup = new List<string>();
    
    FirstArrayToLookup.Add("FirstArray1");
    FirstArrayToLookup.Add("FirstArray2");
    
    SecondArrayToLookup.Add("SecondArray1");
    
    ThirdArrayToLookup.Add("ThirdArray1");
    ThirdArrayToLookup.Add("ThirdArray2");
    ThirdArrayToLookup.Add("ThirdArray3");
    
    string[] FirstStringContains = { "Array1", "Array2" };
    string[] SecondStringContains = { "Array1" };
    string[] ThirdStringContains = { "Array1", "Array2", "Array3" };
    
    if (FirstStringContains.All(keyword => FirstArrayToLookup.Any(item => item.Contains(keyword))))
        Console.WriteLine("First Array to Lookup");
    
    if (SecondStringContains.All(keyword => SecondArrayToLookup.Any(item => item.Contains(keyword))))
        Console.WriteLine("Second Array to Lookup");
    
    if (ThirdStringContains.All(keyword => ThirdArrayToLookup.Any(item => item.Contains(keyword))))
        Console.WriteLine("Third Array to Lookup");
}

运行上述代码将按预期输出三行结果:

First Array to Lookup
Second Array to Lookup
Third Array to Lookup

注:如果需要忽略大小写匹配,可以在Contains方法中传入字符串比较规则,例如item.Contains(keyword, StringComparison.OrdinalIgnoreCase)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.08 16:15:17