【发布时间】:2018-11-25 21:44:34
【问题描述】:
为什么HashSet<T>.GetHashCode() 具有相同元素时返回不同的哈希码?
例如:
[Fact]
public void EqualSetsHaveSameHashCodes()
{
var set1 = new HashSet<int>(new [] { 1, 2, 3 } );
var set2 = new HashSet<int>(new [] { 1, 2, 3 } );
Assert.Equal(set1.GetHashCode(), set2.GetHashCode());
}
此测试失败。为什么?
我怎样才能得到我需要的结果? “相等的集合给出相同的哈希码”
【问题讨论】:
-
您必须实现自己的基于元素的 GetHashCode 函数。
-
查看文档以了解 Hashset.GetHashCode 方法 docs.microsoft.com/en-us/dotnet/api/…
-
你的哈希是比较两个数组,而不是数组的内容。
-
等集 do 给出相同的哈希码。您的
set1和set2不相等,因为它们是不同的对象。测试它;set1.Equals(set2)返回false。 -
这感觉像是一个 XY 问题 - meta.stackexchange.com/questions/66377/what-is-the-xy-problem。你为什么关心
HashCode?您的真正的潜在问题是什么?