Affichage des hashtable

Signaler
Messages postés
14
Date d'inscription
samedi 1 mars 2003
Statut
Membre
Dernière intervention
8 novembre 2006
-
Messages postés
14
Date d'inscription
samedi 1 mars 2003
Statut
Membre
Dernière intervention
8 novembre 2006
-
Bonjour,

je viens de créer un hashtable, mais lorsque je veux afficher les données dans l'ordre où je les ai entrées les clés sont mélangées. Voici un bout de code illustrant mes propos :

Hashtable ht = new Hashtable();
ht. Add( "De", 2);
ht.Add("Di", 1);
ht.Add("Dm", 3);
IEnumerator ie = ht.Keys.GetEnumerator();
while (ie.MoveNext())
{
     MessageBox.Show((string)ie.Current);
}

A l'exécution de ce code,  au lieu d'afficher dans cet ordre : Di, De, Dm
j'obtiens l'affichage dans l'ordre suivant : Dm, De, Di

Merci à vous.........

s010179

10 réponses

Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
La hashtable ne te garantis pas du tout l'ordre dans lequel les données sont stockées. Le but de la hashtable est de retrouver facilement/rapidement un objet a partir d'une clé.
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
Eh oui, j'avais posé la même question pour un Dictionary (qui est bas sur HashTable).

Si je me souviens bien, j'ai essayer de modifier le comparateur, mais ça ne marchait toujours pas.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Si effectivement tu as besoin de conserver un certain ordre, il faudra utiliser un autre object et pas une hashtable...
Regarde par exemple du côté de System.Collections.Specialized.
OrderedDictionary

<hr size="2" />-Blog-
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
Entre mes soucis de gestion du réseau, les WinForm (treeview entre autre) et autre dictionary, je me fais bien chier avec la Framework 1.1, je crois.
Messages postés
14
Date d'inscription
samedi 1 mars 2003
Statut
Membre
Dernière intervention
8 novembre 2006

En utilisant un dictionary cela fonctionne -pour l'instant- parfaitement
voici ler code de remplacement

protected Dictionary<string, string[]> dico = new Dictionary<string, string[]>();
dico.Add("Di", tabmatiereAlu); // tabmatiereAlu est un tableau de 2 éléments
dico.Add("Di", tabmatierePlomb);
dico.Add("Di", tabmatiereChaux) ;
foreach (KeyValuePair<string, string[]> kvp in dico)
{
    MessageBox.Show(kvp.Key + " : " + kvp.Value[0] + " - " + kvp.Value[1]);
}

s010179
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
Fait attention, la aussi le dictionnary ne te garantis en rien l'ordre des éléments... Et même si l'affichage se fait dans l'ordre dans ton exemple, tu ne peux pas etre sur que ce sera toujours le cas...

Comme dis précédement, si tu *doit* ranger tes élements dans un ordre précis, il faut utiliser une structure faite pour ca (liste chainée, triées, etc...)
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
A se demander si mes messages sont lu ces deniers temps....
Peut-être sont-ils transparents ?

<hr size="2" />-Blog-
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
Celui la a été lu... a moitié. Il a quand même gardé le "Dictionary" de ton "OrderedDictionary"... (Sauf qu'a choisir il aurai été préférable qu'il s'attarde plutot sur le "Ordered", mais bon...)
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
lol, je vais me contenter de ça donc...

<hr size="2" />-Blog-
Messages postés
14
Date d'inscription
samedi 1 mars 2003
Statut
Membre
Dernière intervention
8 novembre 2006

Je vous assure que je lis toutes vos observations avec sérieux. Pour le OrderedDictionary je n'ai pas encore tester car à cause de la MSDN ("Représente une collection de paires clé/valeur classées en fonction de la clé ou de l'index.") je me suis dit que mes clés aurait-été classées par ordre alphabétique. Maintenant que vous me confirmeze que mon dico s'affiche dans le bon ordre grâce à un coup de chance, je vais étudié les OrderedDictionary et autres listes chainées...enfin disons tous ce que vous m'avez proposé. En tout cas dommage qu'il n'exite pas un type avec les avantages des tableaux (ordre) et des Hashtable (recherche par clé).......................