检查字符串列表是否包含来自另一个字符串列表的任何子字符串

时间:2021-02-19 18:51:41

标签: linq

关于如何检查字符串是否包含列表中的任何输入,也有类似的问题,但我对如何为两个字符串列表执行此操作感到困惑。

假设我有一个包含以下内容的第一个列表:

["five", "four", "three", "two", "one"]

并有第二个 List<string> 包含:

["bathroom", "twelve", "thirteen", "fou"]

我想看看列表 2 中的任何“子字符串”是否与列表 1 匹配。如果列表 2 中的任何子字符串在列表 1 中找到(即“fou”),则为真,否则如果没有子串匹配发现它是假的。

我想这会使用 linq,但我不确定如何为两个字符串列表执行此操作。

3 个答案:

答案 0 :(得分:1)

var result = list1.Any(s1 => list2.Any(s2 => s1.Contains(s2)));

或者,使用更复杂的语法

var result = list1.Any(s1 => list2.Any(s1.Contains));

答案 1 :(得分:1)

如果您只想拥有 bool result - 如果 string 内的任何 "fou"(例如 secondList)包含在 firstList 内的任何项目中(例如, fourfour) - 你可以试试

  List<string> firstList = new List<string>() {
    "five", "four", "three", "two", "one",
  };

  List<string> secondList = new List<string>() {
    "bathroom", "twelve", "thirteen", "fou",
  };  

  ...

  bool result = secondList
    .Any(second => firstList.Any(first => first.Contains(second))); 

答案 2 :(得分:1)

var list1 = new List<string> { "five", "four", "three", "two", "one" };
var list2 = new List<string> { "bathroom", "twelve", "thirteen", "fou" };
var found = list1.Any(i1 => list2.Any(i2 => i1.Contains(i2)));

编辑

根据您的评论,我了解到您在调试时遇到问题。你可以像下面的例子一样扩展上面的代码,这样它可以帮助你更好地理解代码在做什么:

var list1 = new List<string> { "five", "four", "three", "two", "one" };
var list2 = new List<string> {  "f", "o", "t" };
var found = list1.All(i1 =>
    { 
        var l1Result = list2.Any(i2 => 
            {
                var l2Reuslt = i1.Contains(i2);
                Console.WriteLine($"{i1} constains {i2}: {l2Reuslt}");
                return l2Reuslt;
            });
        Console.WriteLine($"{i1} Final : {l1Result}");
        return l1Result;
    }
);