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

本文关键字:列表 value 字典 删除 | 更新日期: 2023-09-27 18:11:55

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

IDictionary<int,Ilist<T>> 

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

var foo = dictionary
    .Where(f => f.Value.Count > 0)
    .ToDictionary(x => x.Key, x => x.Value);
这将创建一个新的字典。如果您想就地删除,Jon的答案将会奏效。

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

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。这通常比每个值都是列表的字典更简单,尽管它们在概念上非常相似。查找有一个很好的特性,如果您请求一个不存在的键,您将得到一个空序列,而不是异常或空引用。

仅为完整性提供的替代方案。

或者(完全取决于您的用法),在动态修改列表内容时执行此操作,而不是在特定时间点进行批处理。在这种情况下,您可能不需要迭代就知道键:

var list = dictionary[0];
// Do stuff with the list.
if (list.Count == 0)
{
    dictionary.Remove(0);
}