c# - 如何为一对 3D 向量实现 GetHashCode

标签 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 ();
    }
}

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

最佳答案

请引用this answer正确实现 GetHashCode(),因为它也适合您的问题。

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

但是,问题来了,您是打算将向量放入 Hashmap 中,还是考虑了一些不同的空间哈希方法?

关于c# - 如何为一对 3D 向量实现 GetHashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20841258/

相关文章:

c# - 在 VS2015 上使用 xUnit 测试 UWP 应用程序

C# struct,如何分配空值?

c++ - 使用 C++ vector 作为缓冲区

java - hashCode() 和 equals() 与 Class<T>

c# - 需要帮助将 C# 转换为 VB

c# - 在SQL Server中存储数百万个100kb的PDF

c++ - 使用 SSE 操作时的内存访问冲突

java - 将java vector 元素转换为字符串

Java的hashSet处理具有相同哈希码的多个项目

java - 为什么Java中没有Hashable接口(interface)