2

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

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

4

1 回答 1

1

请参考此答案以获得 GetHashCode() 的正确实现,因为它也适合您的问题。

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

但是,问题出现了,您是要将向量放入 Hashmap 中,还是考虑一些不同的空间散列方法?

于 2013-12-30T14:41:05.890 回答