Programmation Visual Basic .NET/Tableaux
Tableaux à une dimension : les listes
[modifier | modifier le wikicode]Le type du tableau est imposé à tous ses éléments (un tableau Integer ne pourra stocker que des entiers). Voici un tableau de taille six (d'indice 0 à 5) :
Dim NomTableau(5) As Integer
Cette déclaration engendre la création de cet objet :
Index | Données |
00 | Nothing |
01 | Nothing |
02 | Nothing |
03 | Nothing |
04 | Nothing |
05 | Nothing |
Que l'on peut parcourir ainsi : NomTableau(0), NomTableau(1),..., NomTableau(10).
Pour assigner des valeurs pendant la déclaration on crée une instance de la classe du type (ici Integer) :
Module Module1
Sub Main()
Dim NomTableau() As Integer = New Integer(4) { 1, 2, 3, 4, 5 }
' Affichage du tableau déclaré
For ligne = 0 To UBound(NomTableau)
Console.WriteLine(NomTableau(ligne))
Next
Console.ReadLine()
End Sub
End Module
Voici un autre exemple avec une instance de String dont les valeurs sont attribuées ensuite :
Dim NomTableau As System.Array
NomTableau = System.Array.CreateInstance(GetType(String), 4)
NomTableau(0) = "a"
NomTableau(1) = "b"
NomTableau(2) = "c"
NomTableau(3) = "d"
' Affichage du tableau déclaré
For ligne = 0 To NomTableau.Length
Console.WriteLine(NomTableau(ligne))
Next
Console.ReadLine()
Pour afficher tous les éléments du tableau d'un coup on utilise un énumérateur :
Dim En As System.Collections.IEnumerator
Dim NomTableau As System.Array
NomTableau = System.Array.CreateInstance(GetType(String), 4)
NomTableau(0) = "a"
NomTableau(1) = "d"
NomTableau(2) = "b"
NomTableau(3) = "c"
' Affichage du tableau déclaré
En = NomTableau.GetEnumerator
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Console.WriteLine("Presser entrée pour continuer...")
Console.ReadLine()
Classer le tableau :
Dim NomTableau As System.Array
Dim En As System.Collections.IEnumerator
NomTableau = System.Array.CreateInstance(GetType(String), 4)
NomTableau(0) = "a"
NomTableau(1) = "d"
NomTableau(2) = "b"
NomTableau(3) = "c"
En = NomTableau.GetEnumerator
Console.WriteLine("Avant classement")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Sort(NomTableau)
En = NomTableau.GetEnumerator
Console.WriteLine("Après classement")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Console.WriteLine("Presser entrée pour continuer...")
Console.ReadLine()
Classer le tableau par ordre décroissant :
Module Module1
Sub Main()
Dim NomTableau As System.Array
Dim En As System.Collections.IEnumerator
Dim DescSortCompare = New DescSortCompareClass
NomTableau = System.Array.CreateInstance(GetType(String), 4)
NomTableau(0) = "a"
NomTableau(1) = "d"
NomTableau(2) = "b"
NomTableau(3) = "c"
En = NomTableau.GetEnumerator
Console.WriteLine("Avant classement décroissant")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Sort(NomTableau, DescSortCompare)
En = NomTableau.GetEnumerator
Console.WriteLine("Après classement décroissant")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Console.WriteLine("Presser entrée pour continuer...")
Console.ReadLine()
End Sub
Public Class DescSortCompareClass
Implements IComparer
Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Return x > y
End Function
End Class
End Module
Renverser le tableau :
Dim NomTableau As System.Array
Dim En As System.Collections.IEnumerator
NomTableau = System.Array.CreateInstance(GetType(String), 4)
NomTableau(0) = "a"
NomTableau(1) = "d"
NomTableau(2) = "b"
NomTableau(3) = "c"
En = NomTableau.GetEnumerator
Console.WriteLine("Avant renversement du tableau")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Reverse(NomTableau)
En = NomTableau.GetEnumerator
Console.WriteLine("Après renversement du tableau")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Console.WriteLine("Presser entrée pour continuer...")
Console.ReadLine()
Une autre façon de classer de façon décroissante est de renverser le tableau croissant :
Dim NomTableau As System.Array
Dim En As System.Collections.IEnumerator
NomTableau = System.Array.CreateInstance(GetType(String), 4)
NomTableau(0) = "a"
NomTableau(1) = "d"
NomTableau(2) = "b"
NomTableau(3) = "c"
En = NomTableau.GetEnumerator
Console.WriteLine("Avant classement décroissant")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Array.Sort(NomTableau)
Array.Reverse(NomTableau)
En = NomTableau.GetEnumerator
Console.WriteLine("Après classement décroissant")
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Console.WriteLine("Presser entrée pour continuer...")
Console.ReadLine()
La ligne Option Strict On
impose d'utiliser SetValue
pour affecter des valeurs aux tableaux :
Option Strict On
Module Module1
Sub Main()
Dim NomTableau As System.Array
Dim En As System.Collections.IEnumerator
NomTableau = System.Array.CreateInstance(GetType(String), 4)
NomTableau.SetValue("a", 0)
NomTableau.SetValue("d", 1)
NomTableau.SetValue("b", 2)
NomTableau.SetValue("c", 3)
For ligne = 0 To NomTableau.Length - 1
Console.WriteLine(NomTableau(ligne))
Next
Console.ReadLine()
End Sub
End Module
Tableaux à plusieurs dimensions
[modifier | modifier le wikicode]On peut déclarer des tableaux 2D, 3D, 4D etc.
' Tableau 2D aux coordonnées (X, Y)
Dim NomTableau2D(2, 2) As Integer
Cela génère cet objet :
Index | Data |
0, 0 | Nothing |
0, 1 | Nothing |
0, 2 | Nothing |
1, 0 | Nothing |
1, 1 | Nothing |
1, 2 | Nothing |
2, 0 | Nothing |
2, 1 | Nothing |
2, 2 | Nothing |
Pour le parcourir on peut utiliser des boucles imbriquées, ou bien un énumérateur :
Dim En As System.Collections.IEnumerator
Dim NomTableau2D(2, 1) As String
NomTableau2D(2, 0) = "3"
NomTableau2D(2, 1) = "c"
NomTableau2D(1, 0) = "2"
NomTableau2D(1, 1) = "b"
NomTableau2D(0, 0) = "1"
NomTableau2D(0, 1) = "a"
' Affichage du tableau déclaré
En = NomTableau2D.GetEnumerator
Do While En.MoveNext
Console.WriteLine(En.Current())
Loop
Console.WriteLine("Presser entrée pour continuer...")
Console.ReadLine()
Le résultat sera :
1 a 2 b 3 c Presser entrée pour continuer...
Méthodes de manipulation de tableaux
[modifier | modifier le wikicode]Split()
: pour transformer une chaine de caractères en tableau, selon le séparateur placé en paramètre.Join()
: convertit un tableau en chaine.Filter()
: filtre les entrées d'un tableau.
Exemple :
Module Module1
Sub Main()
Dim NomTableau() As String = Split("lorem ipsum dolor sit", " ")
Console.WriteLine(NomTableau(1)) ' affiche "ipsum"
NomTableau(4) = "amet"
Dim ContenuTableau As String = String.Join(" ", NomTableau)
Console.WriteLine(ContenuTableau)
Dim SousTableau = Filter(NomTableau, "o", True, CompareMethod.Text)
Console.WriteLine(String.Join(" ", SousTableau)) ' affiche les mots contenant des "o"
Console.ReadLine()
End Sub
End Module