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).

но для создания хэш-набора потребуется некоторое (небольшое) время. Если массив будет часто меняться, то цикл является единственным реалистичным способом сделать это.