Удалить то же значение в списках в словаре в C# - LINQ - PullRequest
0 голосов
/ 23 марта 2020

У меня есть следующий словарь списка:
Dictionary<int, List<int>> links_dict = new Dictionary<int, List<int>>();

Этот объект имеет следующие значения:

1:{[7,8,3]},2:{[1,3]},3:{[4,8]},4:{[8]}

Есть ли способ LINQ для удаления того же значение всех списков в словаре?

Например, если я удалю из него '8', новый словарь будет:

1:{[7,3]},2:{[1,3]},3:{[4]}

1 Ответ

5 голосов
/ 23 марта 2020

Вы можете просто перепроектировать

var results = links_dict.ToDictionary(x => x.Key, x => x.Value.Where(y => y != 8).ToList());

Если вам нужно удалить пустые ключи, вы можете проверить это по факту. Это может дать вам лучшую производительность

foreach (var item in results.Where(item => item.Value?.Any() != true))
   results.Remove(item.Key);

Или

var results = links_dict.Select(x => (x.Key, x.Value.Where(y => y != 8).ToList()))
                        .Where(x => x.Item2?.Any() == true)
                        .ToDictionary(x => x.Item1, x => x.Item2);

Или сохранение исходного словаря

foreach (var key in links_dict.Keys.ToList())
   links_dict[key] = links_dict[key].Where(x => x != 8).ToList();

foreach (var item in links_dict.Where(item => item.Value?.Any() != true).ToList())
   links_dict.Remove(item.Key);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...