C#从所有对象获取唯一哈希

C#从所有对象获取唯一哈希,c#,hash,object,unique,C#,Hash,Object,Unique,我希望能够从所有对象中获取uniqe哈希值。而且, 万一 Dictionary<string, MyObject> foo 字典foo 我想要以下项的唯一键: 串 肌体 MyObject中的属性 foo[someKey] 福 等等 GetHashCode()不保证不同对象的唯一返回值。 这就是我需要的 有什么想法吗?谢谢简单地说,这是不可能的。GetHashCode函数返回一个有符号整数,其中包含2^32个可能的唯一值。在64位平台上,可以运行超过2^32个不同的对象,因此它

我希望能够从所有对象中获取uniqe哈希值。而且, 万一

Dictionary<string, MyObject> foo
字典foo
我想要以下项的唯一键:

  • 肌体
  • MyObject中的属性
  • foo[someKey]
等等

GetHashCode()不保证不同对象的唯一返回值。 这就是我需要的


有什么想法吗?谢谢

简单地说,这是不可能的。GetHashCode函数返回一个有符号整数,其中包含2^32个可能的唯一值。在64位平台上,可以运行超过2^32个不同的对象,因此它们不能都具有唯一的哈希代码


实现这一点的唯一方法是创建一个不同的哈希函数,该函数返回的类型的容量大于或等于运行系统中可以创建的值的数量

简单地说,这是不可能的。GetHashCode函数返回一个有符号整数,其中包含2^32个可能的唯一值。在64位平台上,可以运行超过2^32个不同的对象,因此它们不能都具有唯一的哈希代码


实现这一点的唯一方法是创建一个不同的哈希函数,该函数返回的类型的容量大于或等于运行系统中可以创建的值的数量

如果没有对输入空间的限制,就不可能有唯一的哈希代码。这是因为是一个
int
。如果您有多个
Int32.MaxValue
对象,则其中至少两个必须映射到相同的哈希代码(按)

定义具有限制输入的自定义类型(即,可能的不同对象的数量小于
Int32.MaxValue
),然后,并且只有这样,才能生成唯一的哈希代码。这并不是说这很容易,只是可能而已


或者,不要使用
Object.GetHashCode
机制,而是使用其他表示哈希的方法,这样您就可以随心所欲了。我们需要关于您想要什么以及使用它的目的的明确细节,以便能够在这里帮助您。

如果您的输入空间没有限制,则不可能使用唯一的哈希代码。这是因为是一个
int
。如果您有多个
Int32.MaxValue
对象,则其中至少两个必须映射到相同的哈希代码(按)

定义具有限制输入的自定义类型(即,可能的不同对象的数量小于
Int32.MaxValue
),然后,并且只有这样,才能生成唯一的哈希代码。这并不是说这很容易,只是可能而已

或者,不要使用
Object.GetHashCode
机制,而是使用其他表示哈希的方法,这样您就可以随心所欲了。我们需要关于您想要什么以及使用它来帮助您的明确细节。

“唯一哈希”通常在术语上是矛盾的,即使在一般术语中也是如此(如果您试图使用
Int32
作为哈希值,这显然是不可能的)。从维基百科条目:

哈希函数是任何定义良好的函数 程序还是数学函数 这可能会转换成一个大的 将大小可变的数据量存储到 小数据,通常为单个整数 这可以作为一个指数 数组。散列返回的值 函数称为散列值,即散列 代码、哈希和或简单的哈希

注意“小数据”位——换句话说,可能的对象比可能的散列值多,因此不可能具有唯一性

现在,听起来你真的希望散列是一个字符串。。。这意味着它的大小不是固定的(但必须低于2GB或任何限制)。生成此“唯一散列”的最简单方法是序列化对象并将结果转换为字符串,例如,如果是二进制序列化格式,则使用Base64;如果是基于文本的格式(如JSON),则仅使用文本。然而,这并不是其他人真正认为的“散列”。

“唯一散列”在术语上通常是矛盾的,即使在一般术语中也是如此(如果您试图使用
Int32
作为散列值,这显然是不可能的)。从维基百科条目:

哈希函数是任何定义良好的函数 程序还是数学函数 这可能会转换成一个大的 将大小可变的数据量存储到 小数据,通常为单个整数 这可以作为一个指数 数组。散列返回的值 函数称为散列值,即散列 代码、哈希和或简单的哈希

注意“小数据”位——换句话说,可能的对象比可能的散列值多,因此不可能具有唯一性


现在,听起来你真的希望散列是一个字符串。。。这意味着它的大小不是固定的(但必须低于2GB或任何限制)。生成此“唯一散列”的最简单方法是序列化对象并将结果转换为字符串,例如,如果是二进制序列化格式,则使用Base64;如果是基于文本的格式(如JSON),则仅使用文本。然而,这并不是其他人真正认为的“哈希”。正如其他人所说,哈希代码永远不会是唯一的,这不是重点

关键是帮助您的
字典foo
更快地找到确切的实例。它将使用哈希代码将搜索范围缩小到一组较小的对象,然后检查它们是否相等


如果您需要的是唯一的键,那么可以使用该类来获取唯一的字符串。但这不是散列码。

正如其他人所说,散列码永远不会是唯一的,这不是重点

重点是帮助您的
字典foo
找到确切的实例<