在c#中的字符串列表中查找字符串

vsg*_*vsg 2 c# string list

我试图找到一个字符串列表是否包含C#中的特定字符串.例如:假设我的列表中有3个条目

list<string> s1 = new List<string>(){
  "the lazy boy went to the market in a car", 
  "tom", 
  "balloon"};
string s2 = "market";
Run Code Online (Sandbox Code Playgroud)

现在我想在s1包含s2的情况下返回true,在这种情况下它会执行.

return s1.Contains(s2);
Run Code Online (Sandbox Code Playgroud)

这返回false,这不是我想要的.我正在阅读有关谓词的内容,但对于这种情况,我无法理解它.提前致谢.

Pet*_*iho 10

最简单的方法是单独搜索每个字符串:

bool exists = s1.Any(s => s.Contains(s2));
Run Code Online (Sandbox Code Playgroud)

List<string>.Contains()方法将检查是否有任何整个字符串与您要求的字符串匹配.您需要检查每个列表元素以完成您想要的任务.

请注意,这可能是一个耗时的操作,如果您的列表中包含大量元素,非常长的字符串,尤其是在您搜索的字符串不存在或仅在该字符串附近找到的情况下列表的末尾.

  • 需要注意的是这是一项耗时的操作,`.Any(`将在返回第一个`true`之后停止处理,因此在OP的示例中,它仅在第一个字符串上调用Contains。对于大型列表,这也是一个好例子使用`AsParallel()`将搜索分散到多个线程中'bool存在= s1.AsParallel()。Any(s =&gt; s.Contains(s2));` (2认同)