我有两个字典,一个键和一个值作为元组(两个值)。我想执行以下操作:
- 根据关键字比较两个字典。如果键匹配,则应该比较它们的元组。
- 如果两个字典包含不同的键,即不匹配的键,它应该给出一个错误。
它可以是 linq 表达式,也可以是简单的循环和检查。
Dictionary<string, Tuple<string, string>> dict1= new Dictionary<string, Tuple<string, string>>();
Dictionary<string, Tuple<string, string>> dict2= new Dictionary<string, Tuple<string, string>>();
最佳答案
你可以这样做:
using System.Linq;
using System.Collections.Generic;
public static class DictionaryExtensions {
public static bool IsEqualTo(this Dictionary<string, Tuple<string, string>> dict1, Dictionary<string, Tuple<string, string>> dict2) {
if (!Enumerable.SequenceEqual(dict1.Keys.OrderBy(x => x), dict2.Keys.OrderBy(x => x))) {
return false;
}
foreach(var kvp in dict1) {
var corresponding = dict2[kvp.Key];
if (kvp.Value.Item1 != corresponding.Item1 || kvp.Value.Item2 != corresponding.Item2) {
return false;
}
}
return true;
}
}
然后使用它:
Dictionary<string, Tuple<string, string>> dict1= new Dictionary<string, Tuple<string, string>>();
Dictionary<string, Tuple<string, string>> dict2= new Dictionary<string, Tuple<string, string>>();
Console.WriteLine(dict1.IsEqualTo(dict2)); // True
dict1["a"] = new Tuple<string, string>("a", "b");
dict2["a"] = new Tuple<string, string>("a", "b");
Console.WriteLine(dict1.IsEqualTo(dict2)); // True
dict2["a"] = new Tuple<string, string>("a", "b2");
Console.WriteLine(dict1.IsEqualTo(dict2)); // False
dict2["a"] = new Tuple<string, string>("a", "b");
dict2["b"] = new Tuple<string, string>("a", "b2");
Console.WriteLine(dict1.IsEqualTo(dict2)); // False
更新 感谢 Aluan Haddad 指出排序问题。
关于c# - 如何在 C# 中比较两个字典元组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63293003/