|
Site |
Cours VB.net |
|
|
|
Les Collections |
|
|
Une alternative aux tableaux est l’usage de Collection.
0-Exemple simpliste sur la notion de collection.
Il existe par ordre d'apparition :
- 'Collection' de VisualBasic (Collection)
-les classes du Framework non génériques (ArrayList, Stack, Queue, BitArray, HashTable, SortedList, StringCollection)
-les classes de collections génériques de VB 2005 (List, Dictionnary..)
-les collections HashSet de VB 2008
Il est intéressant de classer les collections par fonction:
A- Les Listes
ArrayList
List(Of..) VB 2005
B- Les Dictionnaires
HashTable
Dictionary (Of..) VB 2005
C- Les Listes-Dictionnaires
SortedList
DictionaryList VB 2005
D- Les Queue et les Queue (Of..)
E- Les Piles: Les Stack et les Stack (Of..)
F- Les Listes chaînées Les LinkedList(Of....) VB 2005
G- Gestion des ensembles: Les HashSet VB 2008
H- Collections travaillant sur les Bits
BitArray
BitVector32
I-Autres
Une collection fonctionne plutôt comme un groupe d'éléments dans laquelle il est possible d’ajouter ou d’enlever un élément à n’importe quel endroit sans avoir à se préoccuper de la taille de la collection, ni ou se trouve l'élément.
Le nombre d'élément n'est pas défini au départ comme dans un tableau. Dans une collection il n'y a que les éléments que l'on a ajouté.
Les éléments sont repérés grâce à un index ou avec une Clé unique
Les items affichées dans une ListBox donnent une idée concrète de ce qu'est une collection.
Exemple simpliste permettant de comprendre la notion de collection:
Soit la collection Col, au départ elle est vide.
J'ajoute des éléments (ou items) à cette collection.
Col.Add ("Toto")
Voici la collection:
|
Toto |
La collection a maintenant 1 élément.
Col.Add("Lulu")
Col.Add("Titi")
|
Toto |
|
Lulu |
|
Titi |
La collection a 3 éléments maintenant.
Col.Remove(1) enlève le second élément (le numéro 1 )
|
Toto |
|
Titi |
Attention le premier élément est l'élément de numéro 0 puis le 1, 2, 3.. jusqu'à n-1, n étant le nombre d'élément.
La collection n'a plus que 2 éléments maintenant.
On voit que le nombre d'éléments n'est pas connu à l'avance, il varie en fonction des éléments ajoutés (ou retirés)
Un élément est repéré par son indice.
Col.Item(1) contient "Titi" (le second Item de la collection)
Remarque:
J'ai pris une collection de 'Base 0': le premier élément à l'indice 0; c'est du .Net. Il existe aussi des collections (celles venant des classes Visual Basic) de Base 1.
On vient de voir une List, il existe aussi les dictionnaires ou on retrouve les éléments par une clé.
A- Les Listes: ArrayList et List(Of..).
Ce sont des collections sous forme de Liste, comme dans l'exemple simpliste. On a un Index pour repérer les éléments.(Pas de clé)
1-ArrayList:Liste d'objets
Fait partie de System.Collections
Il faut donc ajouter en haut du module:
Imports System.Collections
La ArrayList est une collection particulière: On peut y mettre des objets : chaînes, nombres… rien n’empêche que le premier élément soit un entier, le second une chaîne…
Il n'y a pas de clé.
|
Bonjour |
|
Toto |
|
Lulu |
Attention le premier
élément est l'élément 0 (l'index va de 0 à count-1) ; c'est du .NET!!
Dim L As New ArrayList() 'On crée une collection ArrayList
Dim L As ArrayList = ArrayList.Repeat("A", 5)
'On crée une ArrayList de 5 éléments
contenant chacun "A" (on répète "A")
L.Add("Bonjour") 'On ajoute un élément à la collection
MsgBox(L(0)) 'On affiche le premier élément
ou MsgBox(L.Item(0))
Honte à moi j'avais écrit MsgBox(L(0).Item)
MsgBox(L.Count.ToString) 'On affiche le nombre d’élément.
Attention c'est le nombre d'éléments. S'il y a 3 éléments dans la ArrayList ce sont les éléments d'index 0,1,2.
L.Remove("Bonjour") 'On enlève un élément de la liste, celui qui contient "Bonjour"
L.RemoveAt(0) 'On enlève l’élément d'index 0 de la liste
L.Sort() 'Trie la collection
L.Clear() 'Efface tous les éléments
L.Contains (élément) ' Retourne True si la liste contient 'élément'.
Insert permet d’insérer à un index spécifié.
L.Insert( position, Ainserrer)
InsertRange insère une ArrayList dans une Autre ArrayList.
Recherche d'un élément dans une collection NON TRIEE avec IndexOf:
Dim i As Integer
Dim l As New ArrayList
l.Add("toto")
l.Add("lulu")
i = l.IndexOf("lulu")
MsgBox(i.ToString)
'Affiche 1 qui est l'index de "lulu" dans la collection.
On rappelle qu'il existe aussi LastIndexOf qui démarre par la fin et une surcharge permettant de débuter la recherche à partir d'un indice donné (i = l.IndexOf(3,"lulu") recherche à partir du 3ème élément).
ToArray
Recherche d'un élément dans une collection TRIEE avec BinarySearch:
Dim
l As New ArrayList Dim i As Integerl.Add("toto")
l.Add("lulu")
l.Sort()'Il est nécessaire que le tableau soit trié
i = l.BinarySearch("lulu")
MsgBox(i.ToString)
La recherche est plus rapide mais il faut que la collection soit triée.
Pour parcourir une collection, 3 méthodes :
-Avec l’index de l’item
Dim i As Integer
Dim A As String
For i=0 to L.Count-1
A=L.Item(i)
Next i
NB: Comme vu plus haut, on utilise Count pour trouver le nombre d'élément, aussi la boucle doit balayer de 0 à count-1.
-Avec For Each
Dim o As Objet
For Each o in L
MsgBox(o)
Next
Attention A est un objet, si je veux l'afficher par exemple, il faut le 'caster' en String:
Dim s As String= CType(A,String)
-Avec l'objet IEnumerator (débutant passe ton chemin)
On crée un objet C de type IEnumerator pour parcourir la collection, cet objet a 3 propriétés:
MoveNext qui avance d'un élément dans la collection. S'il ne peut plus avancer (s'il est déjà après le dernier) il retourne False
Reset qui place l'élément courant au début, avant le premier élément (Comme au départ)
Current désigne l'élément courant.
Exemple montrant la seule manière de faire pour parcourir la collection:
Dim L As New ListArray
Dim C As IEnumerator= L.GetEnumerator()
While C.MoveNext())
A=C.Current
End While
-Attention, si Option Explicit=On
Les éléments de la ListArray étant des objets, on ne peut pas les affecter à une variable String par exemple, il faut écrire:
Str =
CType(L(0), String) 'on convertit (on cast) l'objet en String.Remarque:
L.Add(Nothing) 'est accepté: on ajoute un élément vide
2-List (Of..):Liste Générique typée
Avant VB 2005 on avait des collections qui pouvaient contenir ce qu'on voulait; ArrayList pouvait contenir par exemple des objets.
A partir de 2005 on a des collections que l'on peut typer, c'est à dire qu'elles ne pourront contenir qu'un type de donnée, que des String, des entiers, des instances de telle classe... On parle de collections génériques. Le terme Of permet de définir le type de la collection.
Dim lst As New List (Of Decimal) crée une liste ne contenant que des 'decimal'.
Nécessite:
Imports System.Collections.Generic
La Collection List (Of..)
C'est comme une ArrayList mais elle est typée. Le type indiqué après Of indique le type de la collection.
|
Toto |
|
Lulu |
|
Titi |
Exemple: créons une collection de String List(Of String): Elle est typée car elle ne peut contenir que des 'String'.
D
im lst As New List(Of String)
Il s'agit d'une List avec Index.
lst(0) est le premier élément.
ou lst.item(0) PAS lst(0).Item
On ajoute une string:
lst.Add(
"toto")
Dim S As String = lst.Item(0) ' l'item est bien typé : même avec 'Option Strict=on' pas besoin de CType.
Nombre d'éléments de la list:
lst.Count
La liste contient t-elle "toto"?
Dim present As Boolean =lst.Contains("toto")
Insérer un élément à une position donnée:
lst.Insert(2, "lulu")
Parcourir tous les éléments et les afficher:
For Each element As String In lst
Console.WriteLine(element)
Next
Rechercher un élément dans la liste:
lst.IndexOf("lulu") retourne l'index de l'élément qui contient "lulu"
lst.IndexOf("lulu", 2,7) recherche à partir de l'élément 2 et sur 7 éléments.
Il existe aussi LastIndexOf
Sur un tableau trié on utilise BinaryScearch.
Rechercher tous les éléments qui répondent à une condition: lst.FindAll
J'ai une liste lst, je veux mettre dans listerecherche tous les éléments de lst qui se terminent par 'lu'.
'on crée une liste (listerecherche) qui grâce à FindAll se chargera des éléments de lst qui répondent à une condition:
Dim listrecherche As List(Of String) = lst.FindAll(AddressOf SeTermineParLU)
'en argument de FindAll on a l'adresse d'une fonction: ici la fonction 'SeTermineParLU'. Pour chaque élément de lst si SeTermineParLU retourne True, l'élément correspondant est passé dans listerecherche
'on affiche listerecherche sur la console.
For Each s As String In listerecherche
Console.WriteLine(s)
Next
'voici la fonction de teste
Private Shared Function SeTermineParLU (ByVal s As String) As Boolean
If (s.Length > 2) AndAlso (s.Substring(s.Length - 2).ToLower() = "lu") Then
Return True
Else
Return False
End If
End Function
Trier:
lst.sort
B- Dictionnaire basé sur le hashage:
Un dictionnaire est une collection avec les clés permettant de retrouver des valeurs.
La HashTable contient des objets, le Dictionary est une collection générique.
Voir le cours sur l'algorithme pour comprendre ce qu'est un 'hachage' ou (hashage).
1-HashTable
C'est un 'Dictionnaire' qui comporte des couples clé-élément, des paires clé-valeur (Objet, Objet).

La clé toujours unique permet de retrouver la valeur: 2 clés ne peuvent être égales.
La clé ne doit pas être vide non plus. Par contre il peut y avoir plusieurs fois la même 'valeur'.
H.Add(Clé,Valeur) Ajoute un élément
H.Item(Clé) Retourne l’élément correspondant à une clé.
H(Clé) Retourne l’élément correspondant à une clé (Item peut être omis car c'est la propriété par défaut).
H.ContainsKey(Clé) Retourne True si la Clé est dans la table.
Cela permet de tester si la clé existe déjà avant de faire un Add:
If Not H.ContainsKey("ht") Then
H.Add("ht", "hypertrm.exe")
End If
H.ContainsValues(Valeur)Retourne True si la valeur est dans la table.
H.Clear Efface tous les éléments
H.Remove(Clé) Supprime l'élément ayant une clé spécifiée.
Les collections H.Values et H.Keys contiennent les valeurs et les clés.
Pour parcourir la HashTable, on utilise une boucle For Each; le couple Key Value étant de type DictionaryEntry.
For Each de As DictionaryEntry In H
Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value)
Next de
Attention on
n'utilise pas de numéro d'index mais uniquement la clé.
Exemple:
' Creation d'une
Hashtable.
Dim myHT As New Hashtable()
' Mettre des éléments dans la HashTable
myHT.Add("un", "premier")
myHT.Add("deux", "second")
myHT.Add("trois", "troisième")
myHT.Add("quatre", "quatrième")
'Recherche la valeur correspondant à la clé "trois"
myReponse=myHT.Item("trois")
'Retourne "troisième"
'Parcourir la HashTable
'Création d'un
IDictionaryEnumerator
Dim myEnumerator As IDictionaryEnumerator =
myHT.GetEnumerator()
While myEnumerator.MoveNext()
'Afficher clé et valeur
MsgBox( myEnumerator.Key+
myEnumerator.Value)
End While
En interne, pour chaque élément, la clé est 'hachée' pour créer un code de hashage qui sert à pointer l'élément et sa valeur.
2-Dictionary(Of..) Dictionnaire générique avec Clé et valeur
A partir de VB 2005.
La clé doit être unique (pas de doublon de clé).
La récupération d'une valeur à partir de sa clé est très rapide.(Utilisation d'un hachage)
Of permet de choisir le type de la clé et celui des valeurs.
Dim Dic As New Dictionary(Of String, String)
' Ajout d'élément
Dic.Add("txt", "notepad.exe")
Dic.Add("bmp", "paint.exe")
' Ajout d'élément en vérifiant avant si la clé n'existe pas
If Not Dic.ContainsKey("ht") Then
Dic.Add("ht", "hypertrm.exe")
End If
' Modifier la valeur correspondant à la clé 'doc'
Dic("doc") = "winword.exe"
'Parcours du Dictionary (le type de clé/Value est KeyValuePair).
For Each kvp As KeyValuePair(Of String, String) In Dic
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value)
Next kvp
' Récupérer une valeur correspondant à une clé
Dic("rtf")
'TryGetValue permet de rechercher une valeur correspondant à une clé, retourne False si la clé n'existe pas (sans déclencher d'erreur).
Dim value As String = ""
If Dic.TryGetValue("tif", value) Then
Console.WriteLine("For key = ""tif"", value = {0}.", value)
Else
Console.WriteLine("Key = ""tif"" non trouvée.")
End If
Dic..ContainsKey("ht") permet aussi de tester si une clé existe.
'Enlever un élément
Dic.Remove("doc")
C- Collection combinant les dictionnaires et les List.
Pour trouver un élément on peut utiliser une clé ou un Index et la collection est triée automatiquement.
1-SortedList:
Il permet l'accès aux valeurs par l'intermédiaire des clés associées ou des index.
C'est un hybride de HashTable et de Array.
On ajoute un élément par mySL.Add(Clé,Valeur)
La séquence d'index est basée sur la séquence de tri. Quand un élément est ajouté, il est inséré dans l'ordre de tri adéquat, et l'indexation s'ajuste en conséquence. Le tri est donc automatique.
On peut donc lire une valeur par sa Clé ou son Index++++:
mySL.Item(CLE) 'retourne la valeur correspondant à la clé CLE
mySL.GetKey(3) 'retourne la Clé qui est dans l'élément d'index 3
mySL.GetByIndex(3) 'retourne la valeur qui est dans l'élément d'index 3
SortedList maintient en interne deux tableaux , un tableau pour les clés et un autre pour les valeurs associées.
Index de base 0: Le premier élément est 0.
Exemple:
Dim mySL As New SortedList()
mySL.Add("1", "Hello")
mySL.Add("2", "World")
mySL.Add("3", "!")
Console.WriteLine(" Count: {0}", mySL.Count) 'Nombre d'éléments
Console.WriteLine(" Capacity: {0}", mySL.Capacity)
'nombre d'éléments possible mais il augmente
automatiquement, on n'a pas à s'en occuper.
Dim i As Integer
For i = 0 To mySl.Count - 1
Console.WriteLine( myList.GetKey(i)& myList.GetByIndex(i))
'affiche les éléments de la
collection
' par index croissant.
Next i
Les
SortedList(Of..).. générique avec Clé et valeur ,trié sur la clé. Ressemble à SortedDictionary, mais occupe moins de mémoire et est moins rapide pour les insertions/suppressions.
2- Les SortedDictionnary(Of..) avec Clé et valeur ,trié sur la clé.
D- Les Queue:
Collection d'objets de type FIFO (First In, First Out)
Premier arrivé premier servi.
C'est la queue devant un cinéma, le premier arrivé, prend son billet le premier.
Les objets (String, Integer,....) stockés dans Queue sont insérés à une extrémité et supprimés à l'autre.
Le nombre d'élément de la queue est géré automatiquement.
DeQueue supprime et retourne l’objet de début de liste
EnQueue ajoute un objet en fin de liste
Peek retourne l’objet de début sans le supprimer

Dim myQ As New Queue()
myQ.Enqueue("One")
myQ.Enqueue("Two")
myQ.Enqueue("Tree")
Console.WriteLine ( myQ.Count) 'Affiche le nombre d'éléments.
Console.WriteLine (myQ.Dequeue())
'Affiche le premier sorti en le sortant. "one" dans notre exemple.
'S'il n'y a plus d'élément cela lève une exception (une erreur), il faut donc
gérer l'exception ou contrôler le nombre d'élément avec la propriété
Count.
If MyQ.Count>0 then
myQ.Dequeue..
End If
Console.WriteLine (myQ.Peek())
'Affiche le premier élément sans l'enlever de la Queue
myQ.Clear()
'Efface tous les éléments de la queue
Les
Queue(Of..) Comme les Queue mais avec un généric
E- Les Stack:
Collection d'objets de type pile ( ou stack) LIFO (Last In, First Out)
Dernier entré, premier sortie.
Ce type de stack (pile) est très utilisé en interne par les programmes informatiques: on stocke dans une stack les adresses de retour des procédures appelées, au retour on récupère l'adresse du dessus.
Push insère un objet en haut de la pile
Pop enlève et retourne un objet en haut de la pile

On peut utiliser une pile dans un programme pour gérer le déplacement de l'utilisateur dans un arbre, les éléments en cours sont stockés par Push, pour remonter en chemin inverse, on Pop.
Attention le premier
élément est ici l'élément 1 (élément d'index 1 à count) A vérifier!!
Exemple:
Dim MaPile As New Stack()
Dim Str As String
'Ajouter des éléments à la pile
MaPile.Push ("A")
MaPile.Push ("B")
MaPile.Push ("C")
'Récupérer un objet de la pile:
Srt =MaPile.Pop()
Str est maintenant égal à "C"
Attention, si Option Explicit=On, les éléments de la pile étant des objets, on ne peut pas les affecter à une variable String, il faut écrire:
Str =
CType(MaPile.Pop(), String) 'on convertit (cast) l'objet en String
Si la pile est vide et que l'on 'Pop', une exception non gérée du type 'System.InvalidOperationException' se produit.(une erreur se produit et cela plante!!), là aussi vérifier que MaPile.Count (qui indique le nombre d'éléments dans la pile) n'est pas égale à 0 avant de 'Poper'.
Mapile.Clear() 'Supprime tous les objets.
Les
Stack(Of..) Comme les track mais avec un généric
F- Les LinkedList(Of..)
Liste Chaînée de générique , chaque élément comportant une propriété Value, Next et Previous. A partir d'un élément, on peut connaître le suivant ou le précédent.
Imports System.Collections.Generic
' Création d'une list.
Dim words() As String = {"the", "fox", "jumped", "over", "the", "dog"}
' Création d'une Linkedlist.
Dim lk As New LinkedList(Of String)(words)
Ajouter le mot 'today' au début.
lk.AddFirst("today")
'Effacer le dernier élément.
lk.RemoveLast()
'Les éléments sont des LinkedListNode, on peut en chercher un avec Find FindFirst, FindLast.
Dim current As LinkedListNode(Of String) = lk.FindLast("the")
'A partir de l'élément courant, on peut ajouter avant ou après.
lk.AddAfter(current, "old") 'il y a aussi AddBefore
'A partir de l'élément courant, on peut parcourir la linkedList
Dim element As LinkedListNode(Of String) = current.Previous 'il y a aussi Next
'On peut déplacer un élément
lk.AddBefore(current, element)
'On peut voir le contenue d'un LinkedListNode
current.Value
current.Previous.Value
'on peut voir la valeur du premier ou du dernier élément:
lk.First.Value
lk.Last.Value
'Il existe aussi
Containst, Count
G-Les HashSet' en VB 2008
Travailler sur les ensembles.
Il s'agit d'une collection sans ordre qui contient des éléments uniques. HashSet possède comme toutes les collections Add, Remove et Contains.. et fournit plusieurs opérations d'ensembles (notamment l'union, l'intersection et la différence symétrique)ce qui permet de prendre en charge la plupart des opérations mathématiques qui sont généralement réalisées sur des ensembles (sens mathématique du terme).
Dim hs As New HashSet(Of String)
Ajout d'éléments:
hs.Add("toto")
hs.Add("lulu")
hs.Add("titi"
La méthode Add renvoie True ou False pour indiquer si elle a fonctionné (s'il n'y avait pas déjà dans la HashSet l'élément que l'on veut ajouter).
Dim caMarche As Boolean = hs.Add("toto") 'retourne False
hs.Count donne le nombre d'élément.
On peut effacer un élément:
hs.Remove("lulu")
On peut effacer sous condition:
Exemple: effacer tous les éléments contenant un "t":
hs.RemoveWhere( Adress Of Test)
'La fonction Test reçoit chaque string de la table et retourne un booléen qui indique si la condition est rempli ce qui déclenche le Remove.
Private Shared Function Test(ByVal s As String) As Boolean
Return (Instr(s,"t")<>0)
End Function
On peut ajouter la collection hs2 à hs grâce à UnionWith:
hs.UnionWith(hs2)
Les éléments doublons (qui existent déjà dans hs ne sont pas ajoutés.
Cela correspond à un And.
On peut rechercher les éléments commun à hs2 et à hs grâce à IntersectWith:
hs.IntersectWith(hs2)
hs contient maintenant les éléments qui étaient présent dans hs et hs2
Cela correspond à un Or.
Supprime tous les éléments de hs qui sont aussi contenus dans la collection passée en paramètre (hs2) avec ExceptWith
hs.ExceptWith(hs2)
hs contient maintenant les éléments qui n'étaient pas présent dans hs et hs2
On peut rechercher les éléments contenus dans hs2 et dans hs mais pas dans les 2 grâce à SymmetricExceptWith:
hs.SymmetricExceptWith(hs2)
hs contient maintenant les éléments qui étaient présent dans hs ou hs2 mais pas les deux.
On peut rechercher si hs2 est un sous ensemble de hs grâce à IsSubsetOf:
Dim b As
Boolean= hs.IsSubsetOf(hs2)
b est égal à True si hs est un sous ensemble de hs2 (tous les éléments de hs sont dans hs2).
Il existe aussi:
IsProperSubstOf qui retourne True si hs est un sous ensemble de hs2 et si hs différent de hs2 (sous ensemble strict)
On peut rechercher si hs est un sur ensemble de hs grâce à IsSupersetOf:
Dim b As
Boolean= hs.IsSupersetOf(hs2)
b est égal à True si hs est un sur ensemble de hs2 (tous les éléments de hs2 sont dans hs).
Il existe aussi:
IsProperSupersetOf qui retourne True si hs est un sur ensemble de hs2 et si hs est différent de hs2 (sur ensemble strict)
H- Collection travaillant sur les Bits.
BitArray permet de travailler sur un nombre quelconque de Bit.
BitVector32 ne permet de travailler que sur 32 bits mais est plus rapide.
1- BitArray:
Necessite:
Imports System.Collection
Crée une collection de booléens (codés sur un bit). La valeur de chaque élément est True ou False.
BitArray permet de travailler sur un nombre quelconque de Booléens ou Bit.
Creation
de BitArray.
Dim myBA As New BitArray(5)
'BitArray
de 5 bits
Dim myBA As New BitArray(5, False)
'BitArray de 5 bits à False
Dim myBA() As Boolean = {True, True, False, False, False}
Dim myBA As New BitArray(myBytes)
'on crée un tableau de Booleans
que l'on met dans le BitArray
Le
premier élément est l'élément 0.
On peut mettre tous les bits à True
avec SetAll:
myBA.SetAll(True)
' Mettre le dernier Bit à False avec
Set.
myBA.Set(myBA.Count - 1, False)
'Obtenir la valeur du second Bit
myBA.Get(1)
myBA(1) ou myBA.Item(1) donnent aussi la valeur du second Bit.
On peut effectuer des opérations logiques entre 2 BitArray (Or,
Xor, And Not):
Exemple pour Or:
myBA1.Or(myBA2)
Count et length donnent le nombre d'éléments, mais count est en lecture seule, Length permet, lui, de modifier le nombre d'éléments.
2- BitVector32:
Ne permet de travailler que sur 32 bits mais est plus rapide.
Imports System.Collection.Specialized
I- Autres collections:
Collections spécialisées:
L'espace
System.Collections.Specialized fournit de nouveaux types de collection très spécifiques, elles ne sont faites que pour un seul type:StringCollection:
Ne peut contenir que des chaînes (cela devrait aller plus vite)
|
"Toto" |
|
"Lulu" |
|
"Titi" |
' Créer une StringCollection.
Dim myCol As New StringCollection()
'Créer un tableau de String, l'ajouter( en fin) à la collection.
Dim myArr() As [String] = {"rouge", "vert", "orange",
"vert",)
myCol.AddRange(myArr)
'Ajouter un élément à la fin de la collection
myCol.Add("marron")
'Insérer un élément à l'index 3
myCol.Insert(3, "bleue")
'Enlever une élément
myCol.Remove("orange")
' chercher et enlever tous les éléments "vert"
Dim i As Integer = myCol.IndexOf("vert")
While i > - 1
myCol.RemoveAt(i)
i = myCol.IndexOf("vert")
End While
' La collection contient t'elle "jaune"?
If myCol.Contains("jaune") Then..
' Copie la collection dans un tableau.
Dim myArr2(myCol.Count) As [String]
myCol.CopyTo(myArr2, 0)
' Efface toutes les strings de la Collection.
myCol.Clear()
'Afficher la liste des Strings
Dim myEnumerator As
System.Collections.IEnumerator = myCol.GetEnumerator()
While myEnumerator.MoveNext()
Console.WriteLine(" {0}", myEnumerator.Current)
End While
'C'est un peu complexe!! on y reviendra.
Attention le premier
élément est ici l'élément 0 (l'index va de 0 à count-1) ; c'est du .NET!!
Intérêts de ses collections est qu'elle sont fortement typées: Elle n'acceptent que des éléments d'un type: des String dans le dernier exemple.
SortedDictionary
L'objet 'Collection' c'est du VisualBasic: A eviter.
'Collection' existait déjà en VB6!!
Utiliser plutôt les collections du Framework.
L'objet collection utilise un couple Clé-Valeur, pour chaque élément.

Ici le premier élément a pour clé: 69, pour valeur:'Rhône'
C'est pratique car cela permet de retrouver une valeur à partir de la clé.
Pour utiliser une collection d'objets, vous devez premièrement créer l'objet maCollection.
Dim
maCollection As New CollectionDès que cet objet est créé, vous pouvez ajouter (avec Add), enlever ou manipuler des éléments.
On utilise la syntaxe: NomCollection.Add( élément, Clé)
maCollection.Add("Bonjour", "30")
maCollection.Add("Monsieur", "31")
maCollection.Add("Et", "32")
maCollection.Add("Madame", "33")
Il peut y avoir 2 autres paramètres:
maCollection.Add(Element, Clé, Before, After)
Before ou After peuvent être utilisés pour placer l'élément à insérer avant ou après un élément de la collection. Si Before ou After est un nombre c'est l'index des éléments qui est utilisé, si c'est une string c'est la clé.
Pour récupérer un objet de la collection, on peut utiliser
Label1.Text = maCollection.Item(2) 'Affiche le second élément: Monsieur
Attention le
premier élément est ici l'élément 1 (l'index va de 1 à
Count); c'est hérité du VB!!
Label1.Text = maCollection.Item("33")
'Affiche Madame
Pour effacer un objet de la collection, on peut utiliser
maCollection.Remove(2) 'Efface le second élément: Monsieur
maCollection.Remove("33")
'Efface Madame
On peut utiliser For each pour parcourir la Collection:
For Each S As string In maCollection
MsgBox(i)
Next S
Remarque pour les 'bons':
Noter que Collection peut contenir des Objets donc n'importe quoi.
Label1.Text = maCollection.Item(2)
Est accepté si Option Strict=Off car il y a y a conversion implicite.
Si Option Strict=On, il faut écrire:
Label1.Text = CType(maCollection.Item(2), String) pour convertir explicitement l'objet en String
Pourquoi le premier élément est 0 ou 1?
Le .NET Framework normalise les collections
comme étant des collections de base zéro (ArrayList par exemple). Les Collections de Visual Basic
fourni des collections de base 1.
Généralisation de la notion de collection.
Certains objets ont une liste de données, d'items, Vb les organise en Collections.
Une collection peut donc faire partie des propriétés d'un objet.
Exemple:
On verra plus loin qu'un contrôle nommé TextBox peut contenir du texte, ce contrôle à une collection nommée .lines qui contient chaque ligne du texte (s'il y en a plusieurs)
Si le texte contient 3 lignes, elles seront dans la collection .lines
Texbox1.lines(0) 'remarquer, ici le premier élément est 0!!
Textbox1.lines(1)
Textbox1.lines(2)
L'indice des éléments va de 0 à count-1
Autres exemple:
Les contrôles ListBox possèdent une collection Items dans laquelle est placé tous les éléments contenus dans la liste. Pour ajouter un élément on utilise la méthode Add de la collection Items: ListBox.Items.Add( )
Un tas d'objets possèdent des collections.
Encore plus: chaque formulaire possède une Collections Controls. Il s'agit d'une collection qui contient tous les contrôles de ce formulaire.
Exemples sur les collections:
Créer une ArrayList, une queue, ajouter la queue à la ArrayList, chercher un élément, insérer un élément.
Les collections font partie de l'espace de nom Systeme.Collections
Imports
System.Collections
' Créer une ArrayList.
Dim myAL As New ArrayList()
myAL.Insert(0, "un")
myAL.Insert(1, "deux")
' Créer une Queue.
Dim myQueue As New Queue()
myQueue.Enqueue("trois")
myQueue.Enqueue("quatre")
' Copies la Queue dans ArrayList à l'index 1.
myAL.InsertRange(1, myQueue)
' Chercher "deux" et ajouter "moins de deux" avant .
myAL.Insert(myAL.IndexOf("deux"), "moins de deux")
' Ajouter "!!!" à la fin.
myAL.Insert(myAL.Count, "!!!")
Lexique anglais=>Français:
Array = tableau, table.
lenght= longueur
Key= clé
Remove (to)= enlever
Stack= tas
|
|
|
|
|