HashTable(string , LinkedList<string> ) => Comment accéder aux données ?

liox69 Messages postés 3 Date d'inscription samedi 11 février 2006 Statut Membre Dernière intervention 19 juin 2009 - 28 mai 2009 à 10:43
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 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);

            IDictionaryEnumerator iEnum = HashTbleStr.GetEnumerator();
            while (iEnum.MoveNext())
            {
                MessageBox.Show(iEnum.Key + ":" + iEnum.Value);
            }

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()" ?

Merci d'avance

9 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
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 ! -
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
28 mai 2009 à 13:28
Essayes ceci:





LinkedList

<


string

> ll1 =


new





LinkedList

<


string

>();
ll1.AddLast(


"elem01"

);



LinkedList

<


string

> ll2 =


new





LinkedList

<


string

>();
ll2.AddLast(


"elem02"

);

Dictionary<
string,
LinkedList<
string>> dic =
new
Dictionary<
string,
LinkedList<
string>>();

dic.Add(

"cl1"

, ll1);
dic.Add(


"cl2"

, ll2);



foreach

(


var

elem


in

dic)
{
  


Console

.WriteLine(elem.Value.First.Value);
}







<hr />
-Blog-
-Site Perso-
0
liox69 Messages postés 3 Date d'inscription samedi 11 février 2006 Statut Membre Dernière intervention 19 juin 2009
28 mai 2009 à 15:06
Effectivement, erreur de casting, il y voyait un type Object pas une LinkedList.

J'utilise maintenant Dictionary et ça marche au poil, merci à vous 2
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
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 ! -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
28 mai 2009 à 15:23
krimog> pas compris? la clé? avec elem.Key?

<hr />
-Blog-
-Site Perso-
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
28 mai 2009 à 15:32
oui, cette clé là.
Y a-t-il moyen de la récupérer dans un foreach ?

De la même manière, y a-t-il moyen de récupérer l'indice de l'élément d'une List en cours de parcours dans un foreach ?

(Je pense que non, mais ça ne coûte rien de demander)

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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 ?

<hr />
-Blog-
-Site Perso-
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
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 ! -
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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.

<hr />
-Blog-
-Site Perso-
0
Rejoignez-nous