当前位置 : 主页 > 编程语言 > delphi >

在Delphi中将GetHashCode的Double转换为Integer

来源:互联网 收集:自由互联 发布时间:2021-06-23
Delphi 2009将GetHashCode函数添加到TObject. GetHashCode返回一个Integer,用于在TDictionary中进行散列. 如果希望对象在TDictionary中正常工作,则需要适当地重写GetHashCode,以便通常不同的对象返回不同的
Delphi 2009将GetHashCode函数添加到TObject. GetHashCode返回一个Integer,用于在TDictionary中进行散列.

如果希望对象在TDictionary中正常工作,则需要适当地重写GetHashCode,以便通常不同的对象返回不同的整数哈希码.

但是你对包含双字段的对象做了什么?如何将这些double值转换为GetHashCode的整数?

例如,它通常在Java中完成的方式是使用Double.doubleToLongBits或Float.floatToIntBits之类的方法.后者的文档描述如下:“根据IEEE 754浮点”单格式“位布局返回指定浮点值的表示.”这涉及对浮点值的不同位使用不同掩码的一些按位操作.

在Delphi中有没有这样做的功能?

我建议对Gamecat代码进行以下改进:

type
  TVarRec = record
    case Integer of
      0: ( FInt1, FInt2 : Integer; )
      1: ( FDouble : Double; )
  end;

function Convert(const ADouble: Double): Integer;
var
  arec : TVarRec;
begin
  arec.FDouble := ADouble;
  Result := arec.FInt1 xor arec.FInt2;
end;

这会考虑Double值的所有位.

(评论不适用于代码)

网友评论