Могу ли я проверить, содержит ли строка в себе элемент массива?

#c# #arrays #string #list #linq

#c# #массивы #строка #Список #linq

Вопрос:

Пытаюсь найти более эффективный способ проверить, содержит ли строка слова (strings) из массива.

У меня есть список строк. Когда я перебираю их, я хочу проверить, содержит ли текущая строка какие-то конкретные слова. Для хранения этих слов я использую массив строк. Итак, мне было интересно, есть ли способ с linq?(или просто более эффективный способ) Что-то вроде string.Any() для строк?

Я сделал это с помощью циклов, но лично мне это не нравится: прежде всего, основной список и массив:

 List<string> lista = new List<string>() {"rn", "<p>This is a paragrath</p>", "<h2>This is a subheader</h2>", "rn" };
string[] arr = new string[] {"<h1>","<h2>","<h3>","<p>" };
  

Теперь я перехожу к циклам:

 for(int i = 0; i < lista.Count; i  )
{
  if(lista[i] != "rn")
    for(int j = 0; j < arr.Length; j  )
    {
      if(lista[i].Contains(arr[j]))
      {
        ...
      }
    }
}
  

Как я уже говорил выше, мне это не нравится таким образом. Есть ли какой-либо другой метод?

Ответ №1:

Это даст вам все элементы, в lista которых хотя бы один элемент arr :

 string[] result = lista.Where(x => arr.Any(a => x.Contains(a)).ToArray()
  

Ответ №2:

Написанный в синтаксисе linq, я думаю, это немного более читабельно.

 var allThatContainTags = from html in lista
                         where html != "rn" amp;amp; arr.Any(html.Contains)
                         select html;