Как удалить массив из Dictionary?

261
12 мая 2017, 13:50

Есть список

var dic = new Dictionaty<string,int>();

Есть отдельно список . Я назвал его stopWords

var stopWords = new List<string>();

Как через linq сделать двойной цикл, который будет проверять наличие элементов stopWords в словаре dic? И если совпадения есть то мы удаляем его из dic.

Я вижу решение с помощью создания двойного цикла, но хотелось бы увидеть через linq

Answer 1

Что-то вроде:

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()
Answer 2

Вы не должны использовать 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

READ ALSO
Как распаковать ресурс, из приложения, в папку?

Как распаковать ресурс, из приложения, в папку?

Подскажите, каким образом можно распаковать ресурс в определенную папку?

266
Использование API Яндекс метрики в C#

Использование API Яндекс метрики в C#

Добрый день, нужно написать программу на C# которая получает при помощи Яндекс метрики число посещений разных сайтовВопрос: реализуемо ли это...

316
Число строк и столбцов в DATAGRID WPF

Число строк и столбцов в DATAGRID WPF

Как из таблицы в DataGrid (WPF) получить число столбцов и строк? в формах было просто : RowCount и ColumnCount а как в wpf ?

405
Проблема с короткой записью условийй PHP

Проблема с короткой записью условийй PHP

После отработки этого кода он выдаёт:

315