OVH Cloud OVH Cloud

hashtable : uniquement un élément retourné (COMPLET)

6 réponses
Avatar
Antonio Fontes
Bonjour à tous ,et mes excuses pour le message précédent incomplet!

Je me trouve devant un cas quelque peu spécial et je ne vois pas
quelle erreur j'aurais pu commettre....

------------code.aspx.cs------------------
foreach(string name in alNames)
{
if(!(htNames.Contains(name)))
{
htNames.Add(name, "");
Response.Write("added: " + name + "<br>");
}
}

Response.Write(htNames.Keys.Count+" keys found.<br>");
foreach(string key in htNames.Keys)
{
Response.Write("clé: " + key + "<br>");
}


-------------sortie à l'écran-----------------
added: Jurisme
added: Culture
added: Info
3 keys found.
Jurisme


Comme vous pouvez le constater, seule une clé parmi les trois est
affichée à l'écran. Quelqu'un pourrait-il me dire pourquoi ?

J'ai testé l'entrée manuelle de ces clés et dans ce cas les trois éléments
sont correctement affichés... Une idée ?

Antonio

6 réponses

Avatar
Keikun
Antonio Fontes a écrit :
Bonjour à tous ,et mes excuses pour le message précédent incomplet!

Je me trouve devant un cas quelque peu spécial et je ne vois pas
quelle erreur j'aurais pu commettre....

------------code.aspx.cs------------------
foreach(string name in alNames)
{
if(!(htNames.Contains(name)))
{
htNames.Add(name, "");
Response.Write("added: " + name + "<br>");
}
}

Response.Write(htNames.Keys.Count+" keys found.<br>");
foreach(string key in htNames.Keys)
{
Response.Write("clé: " + key + "<br>");
}


-------------sortie à l'écran-----------------
added: Jurisme
added: Culture
added: Info
3 keys found.
Jurisme


Comme vous pouvez le constater, seule une clé parmi les trois est
affichée à l'écran. Quelqu'un pourrait-il me dire pourquoi ?

J'ai testé l'entrée manuelle de ces clés et dans ce cas les trois éléments
sont correctement affichés... Une idée ?

Antonio








Quel type d'erreur as-tu? à la compilation?
Avatar
Simon Mourier [MS]
Si alNames est un ArrayList et htNames est une Hastable j'imagine, le code
fonctionne très bien, et ne correspond pas à la sortie à l'écran...
D'ailleurs le mot "clé" n'apparait pas dans la sortie.

La vérité est ailleurs.

Simon.

"Antonio Fontes" a écrit dans le message de
news: 4232480e$0$3687$

Bonjour à tous ,et mes excuses pour le message précédent incomplet!

Je me trouve devant un cas quelque peu spécial et je ne vois pas
quelle erreur j'aurais pu commettre....

------------code.aspx.cs------------------
foreach(string name in alNames)
{
if(!(htNames.Contains(name)))
{
htNames.Add(name, "");
Response.Write("added: " + name + "<br>");
}
}

Response.Write(htNames.Keys.Count+" keys found.<br>");
foreach(string key in htNames.Keys)
{
Response.Write("clé: " + key + "<br>");
}


-------------sortie à l'écran-----------------
added: Jurisme
added: Culture
added: Info
3 keys found.
Jurisme


Comme vous pouvez le constater, seule une clé parmi les trois est
affichée à l'écran. Quelqu'un pourrait-il me dire pourquoi ?

J'ai testé l'entrée manuelle de ces clés et dans ce cas les trois éléments
sont correctement affichés... Une idée ?

Antonio







Avatar
Messenger of the red snake mountain
> Quel type d'erreur as-tu? à la compilation?


Et bien. aucune, justement... Ce sont des copies
d'écran au runtime que j'ai collées. IL n'y a
(malheureusement) pas eu d'erreur... =/

antonio
Avatar
Messenger of the red snake mountain
> Si alNames est un ArrayList et htNames est une Hastable j'imagine, le code
fonctionne très bien, et ne correspond pas à la sortie à l'écran...
D'ailleurs le mot "clé" n'apparait pas dans la sortie.

La vérité est ailleurs.

Simon.



Heu, oui, j'ai traduit et adapté les chaînes texte pour qu'elles
soient plus claires à la lecture du code. Je viens néanmoins
de relire et comparer le code, il n'y a pas d'erreur de copie.

J'ai cependant effectué un test avec un autre Arraylist, rempli
de trois éléments string également et là il n'y a aucun problème.

Ce qui m'intrigue le plus est cette confirmation de la propriété
Count (le débogueur compte également '3' Keys) , qui ne se
vérifie pas du tout lors du dernier foreach.

Je me débrouillerai autrement mais bon, je travaille énormément
avec les hashtable alors du coup cela me met quelques doutes
quant à la fiabilité de cette classe. Soit je l'utilise bien et il y a un
problème, soit je l'utilise mal et je n'ai aucun moyen de savoir
où se trouve mon éventuelle erreur...
Avatar
Simon Mourier [MS]
Ne doutez pas de Hashtable, le code suivant fonctionne parfaitement bien en
console:

ArrayList alNames = new ArrayList();
alNames.Add("Jurisme");
alNames.Add("Culture");
alNames.Add("Info");
Hashtable htNames = new Hashtable();
foreach(string name in alNames)
{
if(!(htNames.Contains(name)))
{
htNames.Add(name, "");
Console.WriteLine("added: " + name + "<br>");
}
}

Console.WriteLine(htNames.Keys.Count+" keys found.<br>");
foreach(string key in htNames.Keys)
{
Console.WriteLine("clé: " + key + "<br>");
}

Vous avez un autre problème.
Simon.

"Messenger of the red snake mountain" a
écrit dans le message de news:
Si alNames est un ArrayList et htNames est une Hastable j'imagine, le
code
fonctionne très bien, et ne correspond pas à la sortie à l'écran...
D'ailleurs le mot "clé" n'apparait pas dans la sortie.

La vérité est ailleurs.

Simon.



Heu, oui, j'ai traduit et adapté les chaînes texte pour qu'elles
soient plus claires à la lecture du code. Je viens néanmoins
de relire et comparer le code, il n'y a pas d'erreur de copie.

J'ai cependant effectué un test avec un autre Arraylist, rempli
de trois éléments string également et là il n'y a aucun problème.

Ce qui m'intrigue le plus est cette confirmation de la propriété
Count (le débogueur compte également '3' Keys) , qui ne se
vérifie pas du tout lors du dernier foreach.

Je me débrouillerai autrement mais bon, je travaille énormément
avec les hashtable alors du coup cela me met quelques doutes
quant à la fiabilité de cette classe. Soit je l'utilise bien et il y a un
problème, soit je l'utilise mal et je n'ai aucun moyen de savoir
où se trouve mon éventuelle erreur...





Avatar
Paul Bacelar
En Console oui, mais mono-thread. Vérifiez que vous ne faites pas la Java
avec les HashTable dans plusieurs threads.
--
Paul Bacelar

"Simon Mourier [MS]" wrote in message
news:#
Ne doutez pas de Hashtable, le code suivant fonctionne parfaitement bien


en
console:

ArrayList alNames = new ArrayList();
alNames.Add("Jurisme");
alNames.Add("Culture");
alNames.Add("Info");
Hashtable htNames = new Hashtable();
foreach(string name in alNames)
{
if(!(htNames.Contains(name)))
{
htNames.Add(name, "");
Console.WriteLine("added: " + name + "<br>");
}
}

Console.WriteLine(htNames.Keys.Count+" keys found.<br>");
foreach(string key in htNames.Keys)
{
Console.WriteLine("clé: " + key + "<br>");
}

Vous avez un autre problème.
Simon.

"Messenger of the red snake mountain" a
écrit dans le message de news:
>> Si alNames est un ArrayList et htNames est une Hastable j'imagine, le
>> code
>> fonctionne très bien, et ne correspond pas à la sortie à l'écran...
>> D'ailleurs le mot "clé" n'apparait pas dans la sortie.
>>
>> La vérité est ailleurs.
>>
>> Simon.
>
> Heu, oui, j'ai traduit et adapté les chaînes texte pour qu'elles
> soient plus claires à la lecture du code. Je viens néanmoins
> de relire et comparer le code, il n'y a pas d'erreur de copie.
>
> J'ai cependant effectué un test avec un autre Arraylist, rempli
> de trois éléments string également et là il n'y a aucun problème.
>
> Ce qui m'intrigue le plus est cette confirmation de la propriété
> Count (le débogueur compte également '3' Keys) , qui ne se
> vérifie pas du tout lors du dernier foreach.
>
> Je me débrouillerai autrement mais bon, je travaille énormément
> avec les hashtable alors du coup cela me met quelques doutes
> quant à la fiabilité de cette classe. Soit je l'utilise bien et il y a


un
> problème, soit je l'utilise mal et je n'ai aucun moyen de savoir
> où se trouve mon éventuelle erreur...
>
>
>