您会认为,如果两个字典包含相同的键和值,它们将返回相同的哈希码并且是相等的,对吗?但他们没有-我做错了什么?或者我如何以这种方式比较字典?
谢谢。下面的代码相同
/在这种情况下我也想测试顺序是否相同/相等。
SortedDictionary<int,string> sd1 = new SortedDictionary<int,string>();
sd1.Add(1,"one");
sd1.Add(2, "two");
sd1.Add(5, "five");
int sd1Hash = sd1.GetHashCode();
SortedDictionary<int, string> sd2 = new SortedDictionary<int, string>();
sd2.Add(1, "one");
sd2.Add(2, "two");
sd2.Add(5, "five");
int sd2Hash = sd2.GetHashCode();
//This is false
bool areEqual = sd1.Equals(sd2);
最佳答案
如果您想测试集合是否相等,包括它们的顺序:
bool areEqual = sd1.SequenceEqual(sd2);
如果您想将集合视为无序集:
bool areEqual =
(sd1.Count == sd2.Count) && (sd1.Intersect(sd2).Count() == sd1.Count);
(如果需要,SequenceEqual
和 Intersect
也可以采用 IEqualityComparer
参数。)
正如其他几个答案所述,SortedDictionary
不会覆盖 Equals
或 GetHashCode
的默认实现。 Equals
的默认实现将使用引用相等性并返回 false
,因为您正在比较两个单独的对象。
关于c# - Dictionary(TKey, TValue) GetHashCode 和 Equals - 它们是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980295/