c# - 改变 Dictionary<K,V> 最快的方法是什么?

标签 c# .net algorithm

这是一道算法题。

我有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/

相关文章:

c# - 直接在C#中设置property的属性

asp.net - Windows 身份验证不起作用

algorithm - Numbrix 生成器算法

c# - Blazor 模态表单验证 : You've to click the cancel button twice to close the modal when you delete a form field

c# - 在 GridView 滚动端加载更多项目

c# - 冗余 ToString 代码?

java - 缩短执行时间

c# - 使用 C# 将完整结果集变量中的数据获取到脚本任务

c# - 引用和值类型场景

algorithm - 使用第 1、2 或 3 步计算到达第 n 级楼梯的总数,但第 3 步只能走一次