SortedList qui trie automatiquement elements [Résolu]

Messages postés
383
Date d'inscription
samedi 29 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2008
- - Dernière réponse : fdiedler2000
Messages postés
383
Date d'inscription
samedi 29 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2008
- 3 juin 2007 à 13:29
Bonjour

Tout est dans le titre !

Par exemple :

J'add dans ma SortedList ceci :

Azerty
Czerty
Bzerty

... dans cet ordre.

Si je regarde l'ordre de la SortedList :

Azerty

Bzerty

Czerty

En effet, elle a triée automatiquement les elements par ordre alphabetique sans me le dire !! D'ou les problèmes d'index des elements et mon programme plante completement ( 2h avant de me rendre compte de cela :( )

De plus c'est pareil avec une ArrayList !

Comment faire pour empecher le traige auto ? Existe t-il une list qui ne trie pas les elements ?

Merci bcp !
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
3
3
Merci
Oulala :

Et si tu nous disais ce que tu essaie de faire? Je me doute que tu est très débutant dans .NET, donc je te répondrai par des concepts très basiques ;)

D'après ce que tu dis, je pense que tu essaie de faire une simple liste de 2 valeurs. Pour cela, pas besoins de prendre une collection de KeyValuePair déjà toute faite, il te suffit d'en déclarer une:

Dim MyList as Generic.List(Of Generic.KeyValuePair(Of String, String))

Ce qui te créé donc une liste de 2 valeurs String.

Mais au lieu d'utiliser la structure KeyValuePair, tu peux très bien te créer ta propre structure ou classe:

Public Structure MyStruct
    Nom as String
    Valeur as String
End Structure

Dim MyList as Generic.List(MyStruct)

Ce qui te créé donc aussi une liste de 2 valeurs String, celle qui sont défini dans MyStruct. De cette facon, tu peux choisir toi-même les noms, les types et le nombre de tes valeurs.

Sinon, un autre concept important; si tu veux accéder à ta liste par index dans le but de parcourir chaque élément comme ceci:

For i as integer = 0 to MyList.Count - 1
    dim Value as MyStruct = MyList.Item(i)
    ...
End For

Il faut savoir que tu peux faire ca d'une autre facon, avec n'importe quelle collection, même ci celle-ci ne sont pas accessible par index (Dictionary par exemple) :

For Each Value as MyStruct in MyList.Values
    ...
End For

Et si tu veux récupérer la clée (key as String dans l'exemple) du Dictionary:

For Each Value as KeyValuePair(Of String, MyStruct) in MyList
    ...
End For

Voilà, j'espère avoir bien compris ton problème et donc que ceci pourra t'aider.

Cordialement

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 143 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Kevin.Ory
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
28
0
Merci
Et que signifie pour toi Sorted dans le nom de la classe ?????

La traduction de SortedList ne serait-elle pas par hasard "Liste triée" ???

Peut-etre qu'une simple List te suffirait dans ton cas.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Bonsoir (et sdalut à Casy)

Sans compter que mon petit doigt (qui me chatouillait et que j'ai porté à l'oreille) vient de me souffler qu'avec une SortedList de VB.Net on pouvait se référer, à son gré, tant à l'index qu'à la clé ...(en se servant de la clé, le problème de l'index disparait totalement)
Commenter la réponse de jmfmarques
Messages postés
383
Date d'inscription
samedi 29 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2008
0
Merci
Oui je sais que c'est une listé triée mais une ArrayList trie aussi !!!

De plus avec les Key ca marche pas dans mon cas !

merci
Commenter la réponse de fdiedler2000
Messages postés
383
Date d'inscription
samedi 29 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2008
0
Merci
En fait ce sont les Key qui sont triées pas les Value

SInon existe t-il une liste avec (Key, Value) mais qui ne trie pas ?
Commenter la réponse de fdiedler2000
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Ca ne "marche" pas, pourquoi ? puisqu'en principe l'index et la clé sont liés et que l'un te permet de connaître l'autre ...
Commenter la réponse de jmfmarques
Messages postés
383
Date d'inscription
samedi 29 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2008
0
Merci
Car je ne connais la clé en fait...
Le probleme est que je récupere la clé en fonction de l'index mais si l'index plante alors la clé est mauvaise ...

J'ai essayer un :
        Dim l As New System.Collections.Generic.Dictionary(Of String, Long)

qui ne trie pas les clés mais le probleme est que la methode GetKey n'existe plus et donc comme je ne connais pas la clé je suis mort :D

Voila en gros il me faut une liste avec clé/valeur et possibilité de récuperer le clé avec l'index (GetKey) et qui ne trie pas les clés !!
En gros une SortedList non "Sorted"
Commenter la réponse de fdiedler2000
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
22
0
Merci
Salut,

Tu as des classes toutes prêtes pour ca :
Dim l As New System.Collections.Generic.Dictionary(Of String, Long)()





__________
 Kenji
Commenter la réponse de Charles Racaud
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Ben... (attends que je réfléchisse à cette très sérieuse question... dur, dur...)

Ah ! Ouf ! j'y suis parvenu :

Une liste triée qui n'est pas triée est une liste ...
Traduction, donc :
A non sorted SortedList is a List.(ce qui veut dire qu'une SortedList qui ne serait pas triée est une List)
Mais là, je te jure, je viens de faire un énorme effort de réflexion... (j'en transpire encore)
Commenter la réponse de jmfmarques
Messages postés
383
Date d'inscription
samedi 29 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2008
0
Merci
[auteurdetail.aspx?ID=231472 Charles Racaud] : J'ai deja essayer...



[auteurdetail.aspx?ID=615490 jmfmarques] : Je ne sais pas comment prendre ton humour... mais je ne sais pas si tu sais ce qu'est une collection avec une paire (clé/Valeur) car à moins du contraire, la collection List (Of) n'accepte pas une paire clé/valeur. Cette derniere equivaut à une ArrayList !

PS : J'ai pas trop réflechie pour te dire ca !

Dsl pour les gros caractéres mais c'est vbfrance qui plante ^^
Commenter la réponse de fdiedler2000
Messages postés
383
Date d'inscription
samedi 29 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2008
0
Merci
Exact passer par une structure était une bonne idée ! J'ai deja trouvé une autre solution mais la tienne est mieux :)
Merci pour les explications détaillées ^^

PS: Je ne suis pas débutant en .NET :p mais je suis loin de tout connaitre !!
Commenter la réponse de fdiedler2000