【发布时间】:2015-02-02 22:15:13
【问题描述】:
我有一个具有 9 个属性的对象:整数、字符串、小数、guid。
我有一个这个对象的数组,长度为 200 万条记录。
我想为此对象的属性创建一个不会与任何其他记录冲突的字符串哈希/校验和。
在 C# 中执行此操作的最佳方法是什么?我考虑过 concat 和 md5,但如果我有 a=1 b=12 或 a=11 b=2 它们会同时连接到 112,则 concat 可能会产生冲突。
编辑:也许 CHECKSUM 是一个更好的词?我只需要进行快速比较而不是直接进行对象比较,我必须对每个字段进行值比较。
【问题讨论】:
-
您考虑过使用唯一键吗?
-
你的每个对象都有一组独特的属性吗?
-
Guid 已经是全球唯一的了,我猜?除非在多个对象中重用相同的 Guid。
-
由于哈希值为
Int32(如果您正在寻找GetHashCode 实现),您的可能性略高于4e9,并且您的类发生冲突的可能性要大得多;这就是为什么根据 Dirichlet 原理 没有这样的哈希 -
哈希总是会发生冲突,即使是最强的加密哈希。它们保证具有不同哈希的对象永远不会相等,而不是相反。它们不是键,它们是避免昂贵的价值比较的一种方式。如果要覆盖 GetHash,只需对对象字段的哈希值进行异或运算
标签: c#