如何检查列表是否包含另一个列表的所有字符串

Pau*_*aul 3 .net c#

我有一个对象列表。该对象包含一个字符串列表。像那样:

public class ObjectA
{
    ...
    IList<string> StringList;
}
Run Code Online (Sandbox Code Playgroud)

我有一个要在 StringList 上搜索的单词列表。我需要在 ObjectA 列表上搜索,并找到包含所有单词(所有单词的一部分)的所有 ObjectA。

所以我这样做了:

 List<ObjectA> myObjectList;
 List<string> wordsToFind;  

 var result = myObjectList.Where(objectA => wordsToFind.All(objectA.StringList.Contains));
Run Code Online (Sandbox Code Playgroud)

问题是我的结果只得到整个单词(等于)。我希望获得包含我的 WordToFind 部分内容的结果。

例子

wordsToFind = {"tes","don"};
StringListElement = {"test", "done"}
Run Code Online (Sandbox Code Playgroud)

应该返回我的选择。

我怎样才能做到这一点?

AAA*_*ddd 5

IndexOf可能是你想去的地方,或者它的重载之一

报告指定 Unicode 字符或字符串在此实例中第一次出现的从零开始的索引。如果在此实例中未找到该字符或字符串,该方法将返回 -1。

List<ObjectA> myObjectList;
List<string> wordsToFind;  

var result = myObjectList.Where(x => x.StringList.All(y => wordsToFind.Any(z => y.IndexOf(z) >= 0)));
Run Code Online (Sandbox Code Playgroud)

另请注意,这的时间复杂度非常高


更新

完整演示在这里

另请注意,如果您想要不区分大小写,请使用

y.IndexOf(z, StringComparison.InvariantCultureIgnoreCase) 
Run Code Online (Sandbox Code Playgroud)

或以下之一

  • CurrentCulture使用区域性敏感的排序规则和当前区域性比较字符串。

  • CurrentCultureIgnoreCase使用区域性敏感的排序规则、当前区域性来比较字符串,并忽略所比较字符串的大小写。

  • InvariantCulture使用区域性敏感排序规则和不变区域性比较字符串。

  • InvariantCultureIgnoreCase使用区域性敏感的排序规则、不变区域性来比较字符串,并忽略所比较字符串的大小写。

  • Ordinal使用序数(二进制)排序规则比较字符串。

  • OrdinalIgnoreCase使用序数(二进制)排序规则比较字符串并忽略所比较字符串的大小写。

  • @Paul 添加了在线演示 (2认同)