如何使用LINQ"修剪"字典?

sco*_*ttm 5 c# linq

我有一个字典和一个要从字典中删除的键列表.这是我现在的实施:

var keys = (from entry in etimes
            where Convert.ToInt64(entry.Value) < Convert.ToInt64(stime)
            select entry.Key).ToList();

foreach (var key in keys)
{
    etimes.Remove(key);
    count--;
}
Run Code Online (Sandbox Code Playgroud)

有什么我可以做的消除foreach循环?

Nol*_*rin 6

var pruned = etimes.Where(entry => Convert.ToInt64(entry.Value) >= 
    Convert.ToInt64(stime)).ToDictionary(entry => entry.Key, 
        entry => entry.Value);
Run Code Online (Sandbox Code Playgroud)

这个语句只是使用LINQ Where函数过滤字典,以选择要保留的项而不是要删除的项(这需要进一步的代码,如您所示).该ToDictionary转换thwe IEnumerable<KeyValuePair<TKey, TValue>>的欲望Dictionary<TKey, TValue>类型,至少是相当简单的,如果不是非常优雅的或有效率,因为需要到指定两个lambda表达式来选择从键和值KeyValuePair(然后创建一个新的字典).说这个,我并不认为这是一个问题,特别是如果字典很小和/或被删除的项目数量很大.