#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;