2015-04-25 2 views
1

У меня есть простой вопрос, что мой разум рисует поле пустым: У меня есть словарь, который выглядит примерно так:C# удалить элемент из вложенного словаря

Dictionary<string, Dictionary<string, string>> dict; 

Насколько я знаю, Dict. Remove() удалит любую запись по ключу, но мне нужно только удалить элемент из самого внутреннего словаря. Как я могу это сделать?

+0

Получите внутренний словарь и вызовите 'Remove()' на этом. I.e., получите значение, указанное ключом в родительском словаре. – Tim

+0

Вложенный словарь - это запах. Используйте соответствующую структуру данных. Это может быть словарь какого-то класса, который, в свою очередь, имеет словарь. Не вложенный словарь. –

ответ

2

Возможно, у вас есть два ключа: один для внешнего словаря и один для вложенного.

Так если вы знаете, что запись присутствует, вы можете использовать

dict[outerKey].Remove(innerKey); 

Если вы не знаете, существует ли запись, вы хотите что-то вроде:

Dictionary<string, string> innerDict; 
if (dict.TryGetValue(outerKey, out innerDict)) 
{ 
    // It doesn't matter whether or not innerKey exists beforehand 
    innerDict.Remove(innerKey); 
} 
1

Попробуйте

dict["key"].Remove("childkey"); 

Обратите внимание, что ключи являются строковыми значениями.

2

Если вы просто внутренний ключ, вы можете сделать что-то вроде этого:

string removeKey = "42"; 

Dictionary<String, String> removeDict = dict.Select(d=> d.Value).FirstOrDefault(d => d.ContainsKey(removeKey)); 

if(removeDict !=null) 
    removeDict.Remove(removeKey); 

В этом варианте осуществления, если имеется более одного регистра с тем же innerKey только первое вхождение будет удален

Смежные вопросы