olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 2010
-
5 sept. 2008 à 23:21
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 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 ?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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).
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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és666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 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