【发布时间】:2010-03-02 15:59:43
【问题描述】:
我需要根据指定的下限删除字典中的所有条目。
我目前的解决方案是这样的:
List<string> keys = new List<string>();
foreach (KeyValuePair<string, int> kvp in dic)
{
if (kvp.Value < lowerBound)
keys.Add(kvp.Key);
}
foreach (string key in keys)
dic.Remove(key);
然而,这是相当昂贵的,特别是因为字典的大小相当大。
我见过这样的 LINQ 解决方案:
foreach(var kvp in dic.Where(kvp.Value <= lowerBound).ToDictionary())
{
dic.Remove(kvp.Key);
}
我认为它更好,因为它只有 1 个 foreach,但我得到了:
当前上下文中不存在名称“kvp”
无法从用法中推断方法“System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable, System.Func)”的类型参数。尝试明确指定类型参数。
我承认我对 LINQ 一无所知,所以有什么想法可以使第二个解决方案或更好的解决方案发挥作用吗?
【问题讨论】:
-
如果您经常执行此下限删除,那么 Dictionary 可能不适合您。
-
幸运的是我只需要做一次。
标签: c# linq .net-3.5 dictionary