c# - 比较字典<字符串,列表<对象>>

标签 c# delegates

我正在比较两个字典(dic1 和 dic2),规则是从 dic2 获取值,其中键匹配,但值不匹配或 dic2 中缺少键。
不需要遍历 dic2 来查找 dic1 中缺失/不同的值。

下面的代码工作正常,我想知道是否有更好的方法使用 .NET 2.0(无 LINQ)。

如果需要优化,哪个选项更好?

Dictionary<string,List<foo>> dic1 = new Dictionary<string,List<foo>>();
Dictionary<string,List<foo>> dic2 = new Dictionary<string,List<foo>>();

dic1.add("1", new foo("a"));
dic1.add("2", new foo("b"));
dic1.add("3", new foo("c"));
dic1.add("3", new foo("c1"));
dic1.add("4", new foo("d"));

dic2.add("1", new foo("a"));
dic2.add("2", new foo("b1"));
dic2.add("3", new foo("c"));
dic2.add("3", new foo("c2"));

//I write code which allow duplicate key in dictionary 

选项1

foreach (KeyValuePair<string, List<foo>> var in dic1)
{
    if (dic2.ContainsKey(var.Key))
    {
        List<foo> tempList = var.Value.FindAll(delegate(foo s)
        {
            return !dic2[var.Key].Contains(s);
        });
        result.AddRange(tempList);
    }
    else
    {
        result.Add(var.Value);
    }

}

选项2

List<string> list1key = new List<string>(dic1.Keys);

list1key.ForEach(delegate(string key)
{
    if (dic2.ContainsKey(key))
    {
        List<foo> tempList = dic1[key].FindAll(delegate(foos)
           {
               return !dic2[key].Contains(s);
           });
        result.AddRange(tempList);
    }
    else
    {
        result.AddRange(dic1[key]);
    }
});

最佳答案

如果您在访问 dic2 时使用 TryGetValue,则可以使用任一选项来加快速度,因此您只需执行一次键查找。

你的第一个选择看起来更简单,可能更快,我会同意。 干杯

关于c# - 比较字典<字符串,列表<对象>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029244/

相关文章:

c# - 什么时候使用扩展方法,ext。方法与继承?

c# - 委托(delegate)和 Func Cast 问题

c# - 如何实现静态类中的自定义委托(delegate)?

moq - 使用 Moq 中的 Delegate 参数验证方法

Kotlin:引用构造函数未传递的委托(delegate)

C# 根据运行时文本框用户输入值禁用复选框

C# regex 引用重复命名组

c# - 正则表达式匹配键 ="value"模式

c# - 使用 Microsoft.Office.Interop.Excel 导出时我是否正确关闭了 excel 文件

c# - 为什么 `Predicate<T>` 与 `Func<T,bool>` 不匹配?