C# проверьте, содержит ли строка какие-либо совпадения в массиве строк
каким будет самый быстрый способ проверить, содержит ли строка какие-либо совпадения в массиве строк в C#? Я могу сделать это с помощью цикла, но я думаю, что это будет слишком медленно.
5 ответов
вы можете объединить строки с регулярным выражением или операторами, а затем "сделать это за один проход", но технически регулярное выражение все равно будет выполнять цикл внутри. В конечном счете, цикл необходим.
использование LINQ:
return array.Any(s => s.Equals(myString))
конечно, вы можете принять во внимание культуру и случай, но это общая идея. Кроме того, если равенство не то, что вы подразумевали под "матчами", вы всегда можете использовать функцию, которую вам нужно использовать для "матча".
Я действительно не мог сказать вам, если это абсолютно самый быстрый способ, но один из способов я обычно делают это:
это проверит, содержит ли строка любую из строк из массива:
string[] myStrings = { "a", "b", "c" };
string checkThis = "abc";
if (myStrings.Any(checkThis.Contains))
{
MessageBox.Show("checkThis contains a string from string array myStrings.");
}
чтобы проверить, содержит ли строка все строки (элементы) массива, просто измените myStrings.Any
в операторе if для myStrings.All
.
Я не знаю, что это за приложение, но мне часто нужно использовать:
if (myStrings.Any(checkThis.ToLowerInvariant().Contains))
так что если вы проверяют, чтобы увидеть пользовательский ввод, не имеет значения, вводит ли пользователь строку ЗАГЛАВНЫМИ буквами, это может быть легко отменено с помощью ToLowerInvariant().
надеюсь, что это помогло!
это отлично работает для меня:
string[] characters = new string[] { ".", ",", "'" };
bool contains = characters.Any(c => word.Contains(c));
Если "массив" никогда не изменится (или изменится только нечасто), и у вас будет много входных строк, которые вы тестируете против него, тогда вы можете построить HashSet<string>
из массива. HashSet<T>.Contains
является операцией O(1), в отличие от цикла, который является O(N).
но для создания хэш-набора потребуется некоторое (небольшое) время. Если массив будет часто меняться, то цикл является единственным реалистичным способом сделать это.