Delphi 2009 добавила функцию GetHashCode в TObject. GetHashCode возвращает целое число, которое используется для хэширования в TDictionary.Преобразование двоичного кода в целое число для GetHashCode в Delphi
Если вы хотите, чтобы объект работал хорошо в TDictionary, вам необходимо соответствующим образом переопределить GetHashCode таким образом, чтобы в целом разные объекты возвращали разные целые хэш-коды.
Но что вы делаете для объектов, содержащих двойные поля? Как вы превращаете эти двойные значения в целые числа для GetHashCode?
Как обычно это делается на Java, скажем, использовать метод Double.doubleToLongBits или Float.floatToIntBits. Последняя имеет документацию, которая описывает ее следующим образом: «Возвращает представление указанного значения с плавающей запятой в соответствии с форматом бит« одиночный формат »с плавающей точкой IEEE 754». Это связано с некоторыми побитовыми операциями с разными масками для разных бит значения с плавающей запятой.
Есть ли функция, которая делает это в Delphi?
Зачем это необходимо изменить? По умолчанию GetHashCode возвращает адрес памяти объекта, который уникален для каждого объекта по определению. –
Я думаю, вам нужно переопределить GetHashCode, если вы переопределяете Equals, если вы хотите, чтобы объекты работали как ключи в словаре. Иногда вы хотите переопределить Equals, чтобы сравнить поля объекта, чтобы проверить, равны ли два объекта, а не просто тестирование, чтобы увидеть, являются ли они одним и тем же экземпляром. –