HashTable(string , LinkedList<string> ) => Comment accéder aux données ?
liox69
Messages postés3Date d'inscriptionsamedi 11 février 2006StatutMembreDernière intervention19 juin 2009
-
28 mai 2009 à 10:43
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 2013
-
28 mai 2009 à 17:05
Bonjour,
J'aimerais réaliser une table de hachage avec comme clé un string et comme value une LinkedList de string (dans un premier temps puis une LinkedList d'objets dans un deuxième temps).
Pour le moment je reste bloqué, voici mon code :
Hashtable HashTbleStr = new Hashtable();
LinkedList<string> ll = new LinkedList<string>();
ll.AddLast("elem01");
HashTbleStr.Add("clé", ll);
LinkedList<string> ll2 = new LinkedList<string>();
ll2.AddLast("elem02");
HashTbleStr.Add("clé2", ll2);
Ce qui me donne comme résultat :
clé:System.Collections.Generic.LinkedList`1[System.String]
clé2:System.Collections.Generic.LinkedList`1[System.String]
Ce que je n'arrive pas à saisir c'est que si IEnum.Value est ma liste pq je ne peux pas y accéder en faisant :
" iEnum.Value.ElementAt(0).ToString()" ?
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 28 mai 2009 à 11:41
Salut
1) Tout d'abord, je ne crois pas qu'une LinkedList ait une méthode ElementAt().
=> Utilise peut-être une List<string> tout simplement
2) Tu as essayé de faire un cast ?
=> (iEnum.Value as LinkedList<string>).First.Value (pas besoin de .ToString(), car c'est déjà une LinkedList de string)
ou si tu utilises une List<string> au lieu d'une LinkedList<string>
=> (iEnum.Value as List<string>)[0]
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 28 mai 2009 à 15:15
Ben en fait, c'est justement la différence entre une HashTable et un Dictionary, le Dictionary est typé.
@Bidou : Le foreach est clairement plus simple qu'un enumerator fait manuellement, mais y a-t-il moyen de récupérer la clé / l'indice de l'élément du Dictionary / de la List dans un foreach ?
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 28 mai 2009 à 15:55
"Le foreach est clairement plus simple qu'un enumerator fait manuellement, mais y a-t-il moyen de récupérer la clé / l'indice de l'élément du Dictionary / de la List dans un foreach ?"
Un foreach est un enumerator, les deux font la même chose.
C'est une simplification d'écriture... un des nombreux "sucre syntaxique" de C#.
Concernant ton histoire de clé, je vois pas trop où tu veux en venir.
Un exemple de code de ce que tu aimerais faire ?
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 28 mai 2009 à 16:11
"Un foreach est un enumerator, les deux font la même chose"
=> C'est pour ça que j'ai précisé "fait manuellement" (je veux dire que c'est plus simple de le faire automatiquement).
Je reconnais que j'ai mal posé ma question (qui de toutes façons n'est pas un vrai problème, puisqu'on peut créer son enumerator manuellement),
mais, tout simplement si je reprends son code d'origine :
IDictionaryEnumerator iEnum = HashTbleStr.GetEnumerator();
while (iEnum.MoveNext())
{
MessageBox.Show(iEnum.Key + ":" + iEnum.Value);
}
Avec un foreach :
foreach(object o in HashTbleStr)
{
MessageBox.Show(??? + ":" + o);
}
Je fais comment pour connaître la clé de mon élément afin de la mettre à la place de "???" ? (mais je ne suis pas sûr du tout que ce soit faisable)
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 28 mai 2009 à 17:05
Ben je te l'ai dit dans mon message du dessus:
elem.Key
pour toi, un enumerator fait "manuellement", c'est quoi? Appeler GetEnumerator?
Si oui, alors c'est bel est bien la même chose qu'un foreach... pas de différence, juste un sucre syntaxique.