Question

J'ai une liste de n GUID et je dois les hacher en une seule valeur. Cette valeur peut correspondre à la taille d’un objet Guid ou à la taille d’un Int32. Peu importe, elle doit être unique sur le plan statistique (par exemple, avec une valeur probablement similaire à MD5).

Donc, une approche pourrait être de les trier, de concaténer les octets et de prendre un hachage MD5 de tous les octets ... mais ce n’est pas très rapide.

Autre idée: je remarque qu’il est assez courant dans .NET d’implémenter la méthode GetHashCode d’un objet composé en tant que XOR des codes de hachage des objets composés. Par conséquent, pourrait-il être mathématiquement sensible à ma liste de GUID XOR?

Toutes les idées sont les bienvenues!

Était-ce utile?

La solution

Si vous souhaitez que le hachage soit valide pour le set (l'ordre importe peu), alors XORing le hashcode de chaque GUID est un bon choix.

Si vous avez réellement une séquence de GUID et que l'ordre est important, nous vous conseillons d'utiliser la même approche que celle que j'ai décrite à propos de dans une autre réponse - ajouter / multiplier à plusieurs reprises.

(Notez que XORing les codes de hachage ne vous donnera probablement pas la même réponse que XORing les GUID eux-mêmes et ensuite le hachage du résultat. Peut-être, mais cela dépend de l'implémentation de GUID.GetHashCode (). Je hacherais chaque valeur et XOR les résultats ensemble - en dehors de toute autre chose, il est facile à mettre en œuvre.)

Autres conseils

Ne pas XOR les GUID puis hachez le résultat. Vous n’obtenez rien de cette façon en vous contentant de XORing les GUID, sauf si vous utilisez un hachage plus petit qu’un GUID.

Étant donné que vous semblez vous soucier vraiment de la performance, un peu plus d’informations seraient utiles - utilisez-vous en particulier différentes combinaisons de GUID en mémoire (afin de ne pouvoir les hacher qu'une seule fois, créé) ou les chargez-vous et les traitez-vous, et des GUID répétés sont peu probables?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top