Есть список
var dic = new Dictionaty<string,int>();
Есть отдельно список . Я назвал его stopWords
var stopWords = new List<string>();
Как через linq сделать двойной цикл, который будет проверять наличие элементов stopWords в словаре dic? И если совпадения есть то мы удаляем его из dic.
Я вижу решение с помощью создания двойного цикла, но хотелось бы увидеть через linq
Что-то вроде:
stopWords.ForEach(sw =>
{
dic.Keys.Where(k => k.Contains(sw)).ToList().ForEach(k =>
{
dic.Remove(k);
}
});
Протестить можно тут.
Ключевой момент: k => k.Contains(sw) использует String.Contains() метод, который ищет подстроку в строке.
Дополнительная документация:
List.ForEach()ICollection.Constains() либо Dictionary.ContainsKey()Dictionary.Remove()Вы не должны использовать LINQ только потому, что это модно. LINQ нужно использовать по делу, тогда код будет проще.
Смысл LINQ состоит в Q — Query. LINQ применяется для того, чтобы опросить нужные данные, а не для того, чтобы модифицировать их. С модификацией традиционный код справляется куда лучше.
Я бы сделал как-то так:
var badKeys = dict.Keys.Where(k => stopWords.Any(w => k.Contains(w))).ToList(); // LINQ-опрос
// ToList() нужно, т. к. мы собираемся модифицировать несущую коллекцию
foreach (var key in badKeys) // модификация в традиционном стиле
dict.Remove(key);
Проверка: http://ideone.com/KxrhzQ
Сборка персонального компьютера от Artline: умный выбор для современных пользователей