从字典中删除值为空列表的项目

时间:2013-05-02 14:34:02

标签: c# dictionary .net-3.5

从值为空列表的字典中删除项目的最佳方法是什么?

IDictionary<int,Ilist<T>> 

3 个答案:

答案 0 :(得分:19)

var foo = dictionary
    .Where(f => f.Value.Count > 0)
    .ToDictionary(x => x.Key, x => x.Value);

这将创建一个 new 字典。如果你想要就地删除,Jon的答案就可以解决问题。

答案 1 :(得分:14)

好吧,如果您需要就地执行此操作,可以使用:

var badKeys = dictionary.Where(pair => pair.Value.Count == 0)
                        .Select(pair => pair.Key)
                        .ToList();
foreach (var badKey in badKeys)
{
    dictionary.Remove(badKey);
}

或者,如果您很乐意创建字典:

var noEmptyValues = dictionary.Where(pair => pair.Value.Count > 0)
                              .ToDictionary(pair => pair.Key, pair => pair.Value);

请注意,如果您有机会更改字典的构建方式,则可以考虑通过ToLookup方法创建ILookup。这通常比字典更简单,其中每个值都是一个列表,即使它们在概念上非常相似。查找具有很好的功能,如果您要求缺少密钥,则会得到一个空序列而不是异常或空引用。

答案 2 :(得分:0)

仅为完整性提供备选方案。

或者(完全取决于您的使用情况),在动态修改列表内容时执行此操作,而不是在特定时间点批处理。在这样的时候,你可能会知道密钥而不必迭代:

var list = dictionary[0];

// Do stuff with the list.

if (list.Count == 0)
{
    dictionary.Remove(0);
}

其他答案解决了在整个字典上进行临时处理的需要。