如何从另一个字典中减去一个字典?

l--*_*''' 0 .net c# dictionary

我们如何减去两个字典,得到具有差异的第三个字典?

我有一本字典Dictionary<string, int>()

+-------+----+
| alex  | 10 |
| liza  | 10 |
| harry | 20 |
+-------+----+
Run Code Online (Sandbox Code Playgroud)

从这个字典中,我想减去这个字典:

+-------+---+
| alex  | 5 |
| liza  | 4 |
| harry | 1 |
+-------+---+
Run Code Online (Sandbox Code Playgroud)

我正在寻找的结果是:

+-------+----+
| alex  |  5 |
| liza  |  6 |
| harry | 19 |
+-------+----+
Run Code Online (Sandbox Code Playgroud)

我们如何减去两个字典,得到具有差异的第三个字典?

Ahm*_*eed 5

我们可以假设它们将始终具有相同的密钥

在这种情况下,使用简单的foreach循环非常容易。完整示例:

var dict1 = new Dictionary<string, int>();
dict1.Add("alex", 10);
dict1.Add("liza", 10);
dict1.Add("harry", 20);

var dict2 = new Dictionary<string, int>();
dict2.Add("alex", 5);
dict2.Add("liza", 4);
dict2.Add("harry", 1);

var dict3 = new Dictionary<string, int>(dict1.Count);   // Thanks, @mjwills!
foreach (var pair in dict1)
{
    dict3.Add(pair.Key, pair.Value - dict2[pair.Key]);
}
Run Code Online (Sandbox Code Playgroud)

或使用ToDictionary方法代替循环:

var dict3 = dict1.ToDictionary(p => p.Key, p => p.Value - dict2[p.Key]);
Run Code Online (Sandbox Code Playgroud)