Utilisation du HashSet

olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 - 5 sept. 2008 à 23:21
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 - 7 sept. 2008 à 23:26
Bonjour

Je vais essayer de me familiariser avec le HashSet mais je ne sais pas encore vraiment comment aborder le truc et si finalement il ne vaut pas mieux utiliser une liste

Voici le principe
J'ai une collection de string
A chaque string distinct j'aimerais attribuer une clef numerique ordinale
Pour la comparaison de string j'utilise une clef representant la string "nettoyée"

Je cree donc une classe
public Classe KString
{
   public string sKey;         // la clef
   public string sOrg;         // la string originale
   public int Val;                // la valeur attribuée
}

Avec une list, pas de probleme, je fais un compareur sur sKey; je verifie l'existense et j'insere si necessaire en attribuant a Val le Cont+1 de ma liste

Mais avec un HashSet : comment peut fonctionner cette logique ?

4 réponses

cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 sept. 2008 à 18:29
Salut,
Je suis actuellement en vacances donc je ne sais pas quand je pourrai repasser ici, au plus tard fin de la semaine prochaine.

Pour ta question, un HashSet est simplement une collection de String, avec la condition supplémentaire que celle-ci ne peut pas contenir de doublon. Si tu essayes d'insérer un élément déjà présent, probablement qu'une exception est soulevée (à confirmer).
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
7 sept. 2008 à 18:58
Salut

Nono un hashset c'est une collection de n'importe quoi avec un Equality comparer
Effectivement on ne peut pas avoir de double !

A mon avis c'est surtoout utile pour des manipulation d'ensemble
Sinon pour un acces O(1) il vaut mieux utiliser le dictionnaire
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 sept. 2008 à 22:47
Oui en fait je venais de voir un exemple avec un Generic <string>, c'est pour ça ;-)

Pour les spécifications exactes il faut consulter MSDN: tout est indiqué dedans...

Pour l'accès au dictionnaire, je doute qu'il soit fait en O(1), ca voudrait dire qu'on sait exactement où aller le chercher, ce qui n'est pas le cas. Par contre, on a probablement un résultat assez bon étant donné qu'un dictionnaire fonctionne comme une hashtable.

J'espère ne pas raconter de bêtises, si oui, je suis pardonné, c'est les vacances encore 6j :)</string>
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
7 sept. 2008 à 23:26
Salut Bidou


Tu dis toi meme que le dictionnaire fonctionne comme une HashTable, je pense effectivement qu'il cree son HashCode sur base de la clef et qu'il stocke en fonction de ce HashCode et de la clef avec un equality comparer.
Exactement comme le HashSet et bien sur, tous les deux sont obligés de traiter un chainage en cas de HashCode double et donc ne sont pas O(1) purs !
La grande différence c'est que le dictionnaire permet l'acces a l'objet stocké, pas le HashSet


 


 
Rejoignez-nous