Попытка найти более эффективный способ проверить, содержит ли строка слова (строки) из массива.
У меня есть список строк. Когда я просматриваю их, я хочу проверить, есть ли в текущей строке какие-то определенные слова. Для хранения этих слов я использую массив строк. Итак, мне было интересно, есть ли способ с linq? (или просто более эффективный способ) Что-то вроде string.Any() для строк?
Я сделал это с помощью циклов, но лично мне это не нравится: Прежде всего, основной список и массив:
List<string> lista = new List<string>() {"\r\n", "<p>This is a paragrath</p>", "<h2>This is a subheader</h2>", "\r\n" };
string[] arr = new string[] {"<h1>","<h2>","<h3>","<p>" };
Теперь я вхожу в петли:
for(int i = 0; i < lista.Count; i++)
{
if (lista[i] != "\r\n")
for(int j = 0; j < arr.Length; j++)
{
if (lista[i].Contains(arr[j]))
{
...
}
}
}
Как я уже говорил выше, мне это не нравится. Есть ли другой метод?





Это даст вам все элементы в lista, которые содержат хотя бы один элемент arr:
string[] result = lista.Where(x => arr.Any(a => x.Contains(a)).ToArray()
Написано в синтаксисе linq, я думаю, что это немного более читабельно.
var allThatContainTags = from html in lista
where html != "\r\n" && arr.Any(html.Contains)
select html;