Mar*_*aro 8 c# dictionary .net-3.5
从值为空列表的字典中删除项目的最佳方法是什么?
IDictionary<int,Ilist<T>>
Run Code Online (Sandbox Code Playgroud)
Jus*_*son 20
var foo = dictionary
.Where(f => f.Value.Count > 0)
.ToDictionary(x => x.Key, x => x.Value);
Run Code Online (Sandbox Code Playgroud)
这将创建一个新的字典.如果你想要就地删除,Jon的答案就可以解决问题.
Jon*_*eet 14
好吧,如果你需要就地执行此操作,可以使用:
var badKeys = dictionary.Where(pair => pair.Value.Count == 0)
.Select(pair => pair.Key)
.ToList();
foreach (var badKey in badKeys)
{
dictionary.Remove(badKey);
}
Run Code Online (Sandbox Code Playgroud)
或者如果您对创建新词典感到满意:
var noEmptyValues = dictionary.Where(pair => pair.Value.Count > 0)
.ToDictionary(pair => pair.Key, pair => pair.Value);
Run Code Online (Sandbox Code Playgroud)
请注意,如果您有机会更改字典的构造方式,则可以考虑ILookup通过该ToLookup方法创建字典.这通常比字典更简单,其中每个值都是一个列表,即使它们在概念上非常相似.查找具有很好的功能,如果您要求缺少键,则会得到一个空序列而不是异常或空引用.