我有一个字典和一个要从字典中删除的键列表。这是我现在的实现:
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--;
}
有什么办法可以消除 foreach 循环吗?
最佳答案
var pruned = etimes.Where(entry => Convert.ToInt64(entry.Value) >=
Convert.ToInt64(stime)).ToDictionary(entry => entry.Key,
entry => entry.Value);
此语句仅使用 LINQ Where
过滤字典函数来选择要保留而不是要删除的项目(如您所示,这需要更多代码)。 ToDictionary
转换 IEnumerable<KeyValuePair<TKey, TValue>>
为了愿望Dictionary<TKey, TValue>
类型,并且至少非常简单,如果不是非常优雅或高效,因为需要指定两个 lambda 表达式来从 KeyValuePair
中选择键和值。 (然后创建一个新字典)。话虽如此,我真的不认为这是一个问题,尤其是当字典很小和/或要删除的项目数量很大时。
关于c# - 如何使用 LINQ to "prune"字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/830709/