【发布时间】:2010-11-20 06:21:45
【问题描述】:
Delphi 2009 将 GetHashCode 函数添加到 TObject。 GetHashCode 返回一个 Integer,用于 TDictionary 中的散列。
如果您希望一个对象在 TDictionary 中正常工作,您需要适当地覆盖 GetHashCode,这样通常不同的对象返回不同的整数哈希码。
但是对于包含双字段的对象,你会怎么做呢?如何将这些双精度值转换为 GetHashCode 的整数?
在 Java 中通常使用的方法是使用 Double.doubleToLongBits 或 Float.floatToIntBits 之类的方法。后者的文档描述如下:“根据 IEEE 754 浮点“单一格式”位布局返回指定浮点值的表示。”这涉及到对浮点值的不同位使用不同掩码的一些按位运算。
Delphi 中是否有这样的功能?
【问题讨论】:
-
为什么需要改变它?默认的 GetHashCode 返回对象的内存地址,根据定义,每个对象都是唯一的。
-
我认为如果要覆盖 Equals,如果您希望对象作为字典中的键工作,则需要覆盖 GetHashCode。有时你想重写 Equals 以便比较对象的字段来测试两个对象是否相等,而不是仅仅测试它们是否是完全相同的实例。
标签: delphi hash double gethashcode