C#检查字符串是否包含字符串数组中的任何匹配项

时间:2010-11-16 04:00:18

标签: c# arrays string contains

检查字符串是否包含C#中字符串数组中的任何匹配项的最快方法是什么?我可以使用循环来完成它,但我认为这会太慢。

5 个答案:

答案 0 :(得分:21)

使用LINQ:

 return array.Any(s => s.Equals(myString))

当然,你可能想要考虑文化和案例,但这是一般的想法。 另外,如果“匹配”不是你所说的平等,你可以随时使用“匹配”所需的功能。

答案 1 :(得分:12)

我真的不能告诉你这是否是绝对最快的方式,但我通常做的一个方法是:

这将检查字符串是否包含数组中的任何字符串:

string[] myStrings = { "a", "b", "c" };
string checkThis = "abc";

if (myStrings.Any(checkThis.Contains))
{
    MessageBox.Show("checkThis contains a string from string array myStrings.");
}

要检查字符串是否包含数组的所有字符串(元素),只需将if语句中的myStrings.Any更改为myStrings.All

我不知道这是什么类型的应用程序,但我经常需要使用:

if (myStrings.Any(checkThis.ToLowerInvariant().Contains))

因此,如果您要检查用户输入,无论用户是否输入大写字母的字符串,都可以使用ToLowerInvariant()轻松反转。

希望这有帮助!

答案 2 :(得分:6)

这对我来说很好:

string[] characters = new string[] { ".", ",", "'" };
bool contains = characters.Any(c => word.Contains(c));

答案 3 :(得分:4)

您可以将字符串与正则表达式或语句组合,然后“一次性完成”,但从技术上讲,正则表达式仍会在内部执行循环。最终,循环是必要的。

答案 4 :(得分:1)

如果“数组”永远不会改变(或者不经常改变),并且你将要测试许多输入字符串,那么你可以从数组中构建一个HashSet<string>HashSet<T>.Contains是O(1)操作,而不是O(N)的循环。

但是构建HashSet需要一些(少量)时间。如果数组经常变化,那么循环是唯一可行的方法。