Как взять найденный элемент list с помощи linq c#
Очень плохо знаком с linq с#, и посмотрев примеры не нашел такого которого хотел бы я. Вот пример кода:
foreach(string word in listWord
.Select(text => text.Trim().ToLower())
.Where(t => setting.worldSerach.All(t2 => t.Contains(t2))))
{
words[word.Replace('{', '-').Replace('}','-')] = words.TryGetValue(word, out int count) ? count + 1 : 1;
}
Т.е как я понимаю, делаю Where, выбираю слово подходящие под условие.
В (List<string>) worldSerach есть слова. Если в тексте есть одно или более из слов, то в (Dictionary<string, int>) words записываю найденное слово + 1.
Я хочу записывать не найденное слово, из listWord, а найденное слово из worldSerach. Т.е из List<string> setting.worldSerach
Какие есть варианты? Прошу помощи!
UPD 1.0
Была ошибка в имени : setting.worldSerach в место world - word.
И в место listWord - listLine
Я хочу сделать следующие: У меня есть список строк, разных маленьких и больших. Потом есть коллекция, символов, слов или мини приложений, хоть что угодно. На данный момент код выполняет следующие:
- Проходиться по массиву.
- Находит каждую строку и проверяет с помощи Where - есть ли там слова находящийся в коллекции.
- Если есть то записывает в Dictionary[Найденный текст] + 1.
Вот код в консоли:
Dictionary<string, int> words = new Dictionary<string, int>();
string[] listText =
{
"Привет Мир!",
"Кто то тут был!",
"Вопросительный знак?",
"Еще какой то дополнительный текст"
};
List<string> searchWord = new List<string>();
searchWord.Add("!");
searchWord.Add("!");
foreach (string line in listText
.Where(t => searchWord.All(t2 => t.Contains(t2))))
{
words[line.Replace('{', '-').Replace('}', '-')] = words.TryGetValue(line, out int count) ? count + 1 : 1;
}
Console.WriteLine("Результат: ");
foreach (var res in words)
{
Console.WriteLine("[{0}] - {1}", res.Key, res.Value);
}
Console.ReadKey();
Убрал Select, и переписал немного Where, в место All -> Any.
Результат:

Тут отображаются количество строк в котором есть символы !,?.
Но мне нужно взять не количество строк, а количество символов найденных в этих строк.
Ответы (1 шт):
internal class Program
{
static void Main(string[] args)
{
var textList = new List<string>
{
"Привет !Ми?р!",
"Кто то тут был!",
"Вопросительный знак?",
"Еще какой то дополнительный текст"
};
var searchWordlist = new List<string>
{
"!",
"?"
};
var result = textList.CountNumberOfCharacters(searchWordlist);
foreach (var word in result)
Console.WriteLine($"Word: {word.Item1}. Count: {word.Item2}");
}
}
internal static class ListExtention
{
public static IEnumerable<(string, int)> CountNumberOfCharacters(this List<string> list, List<string> searchWordlist)
{
foreach (var text in list)
{
var count = text.Count(x => searchWordlist.Contains($"{x}"));
yield return (text, count);
}
}
}
Если будет не лень - создайте класс вместо Tuple, в котором создайте 2 свойства - 1 хранит в себе слово, 2 хранит в себе количество вхождений символа
