首先,我找到了一个3D整数向量的GetHashCode实现,但我无法弄清楚这是不是一个好的(至少我不是100%肯定):
public struct Vector3i
{
public int x;
public int y;
public int z;
public override int GetHashCode ()
{
return x.GetHashCode () ^ y.GetHashCode () << 2 ^ z.GetHashCode () >> 2;
}
}
由此,我想创建一对3D向量(让我们称之为A和B),其哈希码独立于向量A和B的顺序。换句话说,我想要对(A,B) )具有与对(B,A)相同的哈希码。 我想到了这样的事情:
public struct Vector3iPair
{
public Vector3i a;
public Vector3i b;
public override int GetHashCode ()
{
return a.GetHashCode () ^ b.GetHashCode ();
}
}
你认为这会有正确的行为吗?
答案 0 :(得分:1)
请参考this answer以正确实施GetHashCode(),因为它也适用于您的问题。
至于你问题的第二部分,它应该可以正常工作,因为按位xor(^)是可交换的,这意味着无论操作顺序如何,你都会得到相同的结果。
然而,问题出现了,您是否只是将您的矢量放入Hashmaps或者您是否考虑过一些不同的空间哈希方法?