比较字典

时间:2012-01-05 22:15:57

标签: c#

我有3个通用词典

static void Main(string[] args)
{
    Dictionary<string, string> input = new Dictionary<string, string>();
    input.Add("KEY1", "Key1");

    Dictionary<string, string> compare = new Dictionary<string, string>();
    compare.Add("KEY1", "Key1");
    compare.Add("KEY2", "Key2");
    compare.Add("KEY3", "Key3");

    Dictionary<string, string> results = new Dictionary<string, string>();

我想获取输入列表并将每个值与compareTo列表进行比较,如果它不存在,请将其添加到结果列表中?

2 个答案:

答案 0 :(得分:2)

您可以使用LINQ Except()方法:

        foreach (var pair in compare.Except(input))
        {
            results[pair.Key] = pair.Value;
        }

这将执行设置差异(实际上从input减去compare并返回剩余的内容),然后我们可以将其添加到results字典中。

现在,如果results没有以前的值,并且您只想让它成为当前操作中的results,那么您可以直接执行此操作:

      var results = compare.Except(input)
                           .ToDictionary(pair => pair.Key, pair => pair.Value);

这假设您想要键值的差异。如果你有一个不同的值(相同的键),它将显示差异。

也就是说,对于上面的示例,结果将包含:

[KEY2, Key2]
[KEY3, Key3]

但是如果您的示例数据是:

        Dictionary<string, string> input = new Dictionary<string, string>();
        input.Add("KEY1", "Key1");

        Dictionary<string, string> compare = new Dictionary<string, string>();
        compare.Add("KEY1", "X");
        compare.Add("KEY2", "Key2");
        compare.Add("KEY3", "Key3");

结果将是:

[KEY1, X]
[KEY2, Key2]
[KEY3, Key3]

由于KEY1的价值不同。

如果您确实只想要另一个中没有包含键或值的地方,则可以在字典的ExceptKeys集合上执行Values

答案 1 :(得分:1)

dict[key]为您提供密钥为key的值。

dict.ContainsKey(key)dict.ContainsValue(value)是可用于检查字典中是否存在键或值的方法。 ContainsKey更节省时间。