如何为一对3D矢量实现GetHashCode

时间:2013-12-30 14:12:19

标签: c# vector hashcode gethashcode key-pair

首先,我找到了一个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 ();
    }
}

你认为这会有正确的行为吗?

1 个答案:

答案 0 :(得分:1)

请参考this answer以正确实施GetHashCode(),因为它也适用于您的问题。

至于你问题的第二部分,它应该可以正常工作,因为按位xor(^)是可交换的,这意味着无论操作顺序如何,你都会得到相同的结果。

然而,问题出现了,您是否只是将您的矢量放入Hashmaps或者您是否考虑过一些不同的空间哈希方法?