gpt4 book ai didi

c# - Dictionary(TKey, TValue) GetHashCode 和 Equals - 它们是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-03 22:27:09 25 4
gpt4 key购买 nike

您会认为,如果两个字典包含相同的键和值,它们将返回相同的哈希码并且是相等的,对吗?但他们没有-我做错了什么?或者我如何以这种方式比较字典?

谢谢。下面的代码相同

/在这种情况下我也想测试顺序是否相同/相等。

     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);

(如果需要,SequenceEqualIntersect 也可以采用 IEqualityComparer 参数。)

正如其他几个答案所述,SortedDictionary 不会覆盖 EqualsGetHashCode 的默认实现。 Equals 的默认实现将使用引用相等性并返回 false,因为您正在比较两个单独的对象。

关于c# - Dictionary(TKey, TValue) GetHashCode 和 Equals - 它们是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com