Question

J'utilise un HashSet<T> pour stocker une collection d'objets. Ces objets ont déjà un identifiant unique de System.Guid, donc je préfère l'utiliser HashSet<> juste que ID existant plutôt que d'essayer de comprendre lui-même comment l'objet de hachage. Comment remplacer la construction dans le hachage et la force de mon programme à utiliser la construction de la valeur d'identité comme la valeur de hachage?

dis aussi que je connais le Guid d'un objet dans mon HashSet<>, est-il un moyen d'obtenir un objet d'un HashSet<T> basé sur ce Guid seul? Ou devrais-je utiliser un dictionnaire à la place.

Était-ce utile?

La solution

Un HashSet<> ne repose pas une paire clé / valeur, et ne fournit pas l'accès « par la touche » - il est juste un ensemble de valeurs uniques, en utilisant le hachage pour vérifier le confinement très rapidement

.

Pour utiliser une paire de clés / valeur (pour aller chercher par Guid plus tard) l'option la plus simple serait un Dictionary<Guid,SomeType>. Le code de hachage existant sur Guid devrait être bien (bien que si vous avez besoin (vous n'êtes pas ici), vous pouvez fournir un IEqualityComparer<T> à utiliser pour le hachage.

Autres conseils

Remplacer la méthode GetHashCode() pour votre objet .

Bien sûr, il y a une légère ride ici ... GUIDs sont plus grandes que INT32, qui utilise .NET pour hashcodes.

Pourquoi avez-vous besoin de passer outre cela? semble être peut-être une optimisation prématurée.

Oui, il suffit d'utiliser un dictionnaire. Une fois que vous développez votre application, passer par une phase d'optimisation des performances où l'on mesure la performance de l'ensemble de votre code. Si et seulement si cette fonction de hachage montre comme étant votre plus grand drainage devriez-vous envisager une structure de données plus performante (s'il y a une toute façon): -)

Essayez de regarder dans System.KeyedCollection . Il vous permet d'intégrer la connaissance du domaine clé dans votre mise en œuvre de la collection.

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