Как удалить значение из словаря в C # с помощью linq? - PullRequest
1 голос
/ 03 ноября 2010

у меня словарь как

Dictionary<String,List<String>> MyDict=new Dictionary<String,List<String>>();

и содержит

{ "One"   { "A", "B", "C" } }
{ "Two"   { "C", "D", "E" } }

Теперь мне нужно удалить «C» в «One»

так что теперь MyDict станет

{ "One"   { "A", "B" } }
{ "Two"   { "C", "D", "E" } }

Итерация по паре Keyvalue и восстановление словаря приведет к требуемому результату (теперь я использую этот метод итерации)

Но есть ли способ сделать это в LINQ?

Ответы [ 3 ]

3 голосов
/ 03 ноября 2010

Это создает новый словарь и новый список для каждого ключа, опуская "C" в "One":

var result = myDict.ToDictionary(
    kvp => kvp.Key, 
    kvp => kvp.Value.Where(x => kvp.Key != "One" || x != "C").ToList());

В качестве альтернативы, это создает новый словарь и новый список для "One", сохраняя остальные списки:

var result = myDict.ToDictionary(
    kvp => kvp.Key,
    kvp => (kvp.Key != "One") ? kvp.Value
                              : kvp.Value.Where(x => x != "C").ToList());

Возможно, проще и быстрее изменить словарь на месте, хотя:

myDict["One"].Remove("C");
2 голосов
/ 03 ноября 2010

LINQ - это излишество, это просто:

MyDict["One"].Remove("C");

Кроме того, LINQ (и функциональная парадигма в целом) специально разработана для работы с немодифицируемыми последовательностями, удаление чего-либо, как правило, создает новую последовательность, которая почти всегда приводит к огромным накладным расходам в этом случае, поскольку она имитирует функциональную парадигму на совершенно другом языке .

0 голосов
/ 03 ноября 2010
MyDict["One"].Remove("C");

Почему вы хотите использовать linq. Одной из особенностей при использовании LINQ является неизменность обрабатываемых объектов, поэтому я думаю, что это не то, что вам действительно нужно. Делать это с помощью linq намного сложнее (например, обрабатывать словарь как IEnumerable из KeyValuePair, а не создавать новый словарь из него ....), и, вероятно, я не должен этого делать, если вы не создаете какую-то конвейерную обработку с использованием этого dict.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...