Collection, trouver le rang à partir de la clé

alainc14 Messages postés 12 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 30 mai 2008 - 25 avril 2008 à 19:37
alainc14 Messages postés 12 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 30 mai 2008 - 26 avril 2008 à 08:35
Bonjour,

Je débute avec les collections.

Quelques question sans doute naïves :



1°) Dans une collection, existe-t-il un système simple pour déterminer :






-         
quel est le rang (index) d’un élément dont la clé d’accès est « Ma clé »








-         
quelle est la clé d’accès de l’élément de rang 37 ?





<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>



2°) On souhaite bidouiller un élement d'une collection SANS modifier la collection
Set myElt = myCol(4) si je bidouille myElt ça modifie (évidemment) myCol
Si je fais : Set myNewElt = myElt c'est également le cas. J'en conclue que myElt est une sorte de pointeur vers les données. Si je le copie, il continue à pointer vers les mêmes données !
Du coup, comment s'en sortir pour arriver à "déconnecter" pointeur et données et à récupérer effectivement celles-ci ?

3°) A condition que vous me proposiez des solutions aux questions précédentes, les collections me semblent présenter des avantages sur les tableaux dynamiques (pas de redim preserve, accès par clé, boucle for each in, etc.)
Est-ce que ça présente des inconvénients majeurs dont je n'aurais pas encore pris conscience ?







Merci d’avance !

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
26 avril 2008 à 05:34
Salut
As-tu essayer de regarder les attributs de ta Collection ?
Normalement, il doit y avoir :
maCollection(monIndex).Key
et
maCollection("maClé").Index

Avantage des Collections :
- La recherche par clé "chaine" plus facile grace aux clés (si pas de doublons)
- Recherche beaucoup plus rapide
- Peut accepter de stocker presque n'importe quoi : Texte bien sûr, mais aussi structures, objects, composants

Inconvénients :
- Lenteurs lors des suppressions d'éléments (par rapport aux tableaux dynamiques)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
alainc14 Messages postés 12 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 30 mai 2008
26 avril 2008 à 08:22
Jack,

Etes-vous sûr de votre réponse (matinale ...) ? J'utilise VB6 avec le SP.

maCollection(monIndex).Key et maCollection("maClé").Index ne fonctionnent pas : erreur 424 "un objet est requis"

D'ailleurs dans l'aide sur ke thème Collection, Objet
- propriété proposée .Count
- méthodes proposées .Add .Remove .Item

Merci
0
alainc14 Messages postés 12 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 30 mai 2008
26 avril 2008 à 08:35
Il existe une méthode .Keys pour l'objet Scripting.Dictionary qui renvoie un tableau des clés classées dans l'ordre d'index.

J'ai déjà utilisé cette histoire dans le passé mais je suis tombé récemment sur :
http://www.vbfrance.com/infomsg_COLLECTION-VS-DICTIONNARY_522062.aspx
qui ne m'a pas encouragé à récidiver ...
0
Rejoignez-nous