Delphi 2009 a ajouté la fonction GetHashCode à TObject. GetHashCode renvoie un entier qui est utilisé pour le hachage dans TDictionary. Si vous voulez qu'un objet fonctionne correctement dans TDictionary, vous devez remplacer GetHashCode de façon appropriée, de sorte qu'en général, différents objets renvoient différents codes de hachage entiers.Conversion d'un double en entier pour GetHashCode dans Delphi
Mais que faites-vous pour les objets contenant des champs doubles? Comment transformez-vous ces valeurs doubles en nombres entiers pour GetHashCode?
La façon dont cela se fait habituellement en Java, par exemple, est d'utiliser une méthode comme Double.doubleToLongBits ou Float.floatToIntBits. Ce dernier dispose d'une documentation qui le décrit comme suit: "Renvoie une représentation de la valeur à virgule flottante spécifiée conformément à la disposition de bit" format unique "à virgule flottante IEEE 754." Cela implique des opérations au niveau du bit avec des masques différents pour les différents bits d'une valeur en virgule flottante.
Y at-il une fonction qui fait cela dans Delphi?
Pourquoi avez-vous besoin de le changer? Le GetHashCode par défaut renvoie l'adresse mémoire de l'objet, qui est unique pour chaque objet par définition. –
Je pense que vous devez remplacer GetHashCode si vous remplacez Equals, si vous voulez que les objets fonctionnent comme des clés dans un dictionnaire. Parfois, vous voulez remplacer Equals afin de comparer les champs de l'objet pour tester si deux objets sont égaux, par opposition à juste tester pour voir si elles sont exactement la même instance. –