我有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列表进行比较,如果它不存在,请将其添加到结果列表中?
答案 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的价值不同。
如果您确实只想要另一个中没有包含键或值的地方,则可以在字典的Except
或Keys
集合上执行Values
。
答案 1 :(得分:1)
dict[key]
为您提供密钥为key
的值。
dict.ContainsKey(key)
和dict.ContainsValue(value)
是可用于检查字典中是否存在键或值的方法。 ContainsKey
更节省时间。