这是一道算法题。
我有Dictionary<object,Queue<object>>
.每个队列中包含一个或多个元素。我想从字典中删除所有只有一个元素的队列。最快的方法是什么?
伪代码:foreach(item in dict) if(item.Length==1) dict.Remove(item);
在循环中很容易做到这一点(当然不是 foreach),但我想知道哪种方法最快。
为什么我想要它:我使用该字典在大量对象中查找重复元素。字典中的键是对象的哈希,值是找到具有相同哈希的所有对象的队列。由于我只想要重复项,因此我需要删除关联队列中只有一个对象的所有项。
更新:
了解在常规情况下,大量对象中只有少数重复项可能很重要。让我们假设 1% 或更少。因此,保留 Dictionary 原样并使用第一个 Dictionary 中的选定元素从 scatch 创建一个新的可能会更快......然后完全删除第一个 Dictionary。我认为这取决于特定算法中使用的计算字典类方法的复杂性。
我真的很想在理论层面上看到这个问题,因为作为老师我想和学生讨论这个问题。我自己没有提供任何具体的解决方案,因为我认为这很容易做到。问题是哪种方法最好、最快。
最佳答案
var itemsWithOneEntry = dict.Where(x => x.Value.Count == 1)
.Select(x => x.Key)
.ToList();
foreach (var item in itemsWithOneEntry) {
dict.Remove(item));
}
关于c# - 改变 Dictionary<K,V> 最快的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13512777/