检查字符串是否包含C#中字符串数组中的任何匹配项的最快方法是什么?我可以使用循环来完成它,但我认为这会太慢。
答案 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需要一些(少量)时间。如果数组经常变化,那么循环是唯一可行的方法。