Programmation .Net - Indépendance financière

Comment fonctionnent les tableaux à 1 et 2 dimensions en Visual Basic

Parfois nous aurons besoin de garder en mémoire des données sous la forme d’un tableau (array). Nous avons déjà eu affaire à ce type de variable durant le tutoriel sur les boucles toutefois, je tiens à faire un petit rappel avant de nous enfoncer davantage dans coeur du sujet. Les tableaux commencent à l’index 0 et ont (techniquement) une longueur fixe. De plus, ils contiennent plusieurs éléments d’un même type dans une variable simple, on peut donc les accéder de cette variable directement. Cette variable sera déclarée comme un nouveau tableau et nous utiliserons certaines méthodes pour faire des opérations sur celle-ci.

Lorsque vous voulez déclarer un tableau en Visual Basic, vous devriez lui donner une longueur et respecter cette longueur tout au long de votre programme, il est possible de modifier cette longueur en cours de route, toutefois je n’entrerai pas dans cette partie maintenant, sachez seulement que c’est possible.

Dim Strings(2) As String
Strings = {"Alexandre", "Daniel", "Maxime"}

Strings(2) défini la longueur du tableau, c’est-à-dire le nombre de cases mémoire dans lesquelles nous pourrons stocker des valeurs de type String (dans le cas présent). Avec 2 comme valeur maximale, cela nous donne 3 éléments car, rappelez-vous que le tableau commence à 0 donc 0, 1, 2. Il est aussi possible de ne pas mettre de valeurs initialement dans le tableau, il sera alors vide et prêt à être utilisé quand même.

Vous pouvez vous servir des boucles pour remplir un tableau, dans ce cas la boucle For est très bien placée pour effectuer la tâche.

Module Program
    Dim _Rnd As Random

    Sub Main()
        _Rnd = New Random()

        'Une autre façon de créer un tableau à une dimension
        Dim ArrayOfInt = New Integer(10) {}

        'On passe à travers le tableau pour mettre des valeurs aléatoires avec SetValue qui prend la valeur à ajouter et l'index désiré
        For Index As Integer = 0 To 10 Step 1
            ArrayOfInt.SetValue(_Rnd.Next(0, 1000), Index)
        Next

        'On passe à travers le tableau une seconde fois pour afficher chacune des valeurs à l'aide de GetValue qui prend l'index désiré en paramètre
        For Index As Integer = 0 To ArrayOfInt.Length - 1 Step 1
            Console.WriteLine(ArrayOfInt.GetValue(Index))
        Next
        'On stop l'exécution avec ReadKey()
        Console.ReadKey()
    End Sub
End Module

Ceci comprend tout le code du fichier contenant le Main(). La première chose à remarquer est la déclaration de la classe Random qui nous servira à générer des valeurs de type Integer aléatoires.

Ensuite, constatez une autre façon de déclarer un tableau à l’aide du mot clé New. Ce tableau contiendra 11 espaces en mémoire (puisqu’on aura écrit 10). Ça peut sembler un peu complexe toutefois je vous suggère de mettre un breakpoint et de passer votre souris au dessus de la variable tableau pour voir son contenu comme montré ci-dessous.

Array BreakPoint

Dans la première boucle, j’utilise la méthode SetValue(ValueToSet, Index) sur la variable ArrayOfInt pour assigner une valeur générée aléatoirement à une position spécifique dans le tableau. Remarquez que la méthode _Rnd.Next(…) est placée directement à l’intérieur de la demande d’argument pour l’objet à insérer dans le tableau. Il aurait été possible de diviser cette étape en deux en créant une nouvelle variable à l’intérieur de la boucle et en l’assignant à _Rnd.Next(…) qui est le nombre généré aléatoire.

Dans la deuxième boucle, on affichera, une par une, les valeurs contenues dans le tableau que l’on vient tout juste de remplir. Nous aurions pu exécuter le tout dans une seule boucle, toutefois dans le cas où vous devriez remplir et afficher le tableau à deux différents endroits comme c’est souvent le cas, cette façon de faire vous sera plus utilise.

Remarque : le ArrayOfInt.Length, retournant la longueur du tableau (11 dans ce cas), est trop grande puisque nous irons de 0 à 10 et non de 0 à 11, nous allons donc devoir retirer 1 lors de la vérification de la condition de la boucle pour nous assurer de ne pas dépasser la longueur du tableau et risquer de recevoir une tappe sur les doigts de la part de Visual Basic. Faites attention à cela, encore une fois les breakpoints sont très utiles! Vous devez toujours demeurer en contrôle de ce que fait l’ordinateur et non l’inverse.

De plus, remarquez que ArrayOfInt.Length ne prend pas de () parenthèses puisque ce n’est pas une méthode. Il est en fait un paramètre qui est comme une variable appartenant à l’objet ArrayOfInt et qui est mise à notre disposition. Ces variables peuvent contenir des informations importantes sur l’objet courant.

Même code, mais plus rapide à écrire

Voici une variante au code plus haut.

Module Program
    Dim _Rnd As Random

    Sub Main()
        _Rnd = New Random()

        'Une autre façon de créer un tableau à une dimension
        Dim ArrayOfInt = New Integer(10) {}

        'On passe à travers le tableau pour mettre des valeurs aléatoires avec SetValue qui prend la valeur à ajouter et l'index désiré
        For Index As Integer = 0 To 10 Step 1
            ArrayOfInt(Index) = _Rnd.Next(0, 1000)
        Next

        'On passe à travers le tableau une seconde fois pour afficher chacune des valeurs à l'aide de GetValue qui prend l'index désiré en paramètre
        For Index As Integer = 0 To ArrayOfInt.Length - 1 Step 1
            Console.WriteLine(ArrayOfInt(Index))
        Next
        'On stop l'exécution avec ReadKey()
        Console.ReadKey()
    End Sub
End Module

Avez-vous remarqué les différences? ArrayOfInt(Index) et ArrayOfInt(Index) = _Rnd.Next(0, 1000). Nous n’utilisons tout simplement pas le GetValue et le SetValue mais plutôt seulement des parenthèses. C’est disons, un peu plus près de la façon avec laquelle C# fait les choses avec ses “[]” square brackets en bon français. Je trouve personnellement que cette pratique est plus facile et plus intuitive. Mais vous avez le choix puisqu’elles sont équivalente, ce que je vous suggère est de choisir une méthode et rester avec ce choix.

Voici le résultat attendu si vous effectuez l’exécution (Start).

Arrays result

Tableaux à plusieurs dimensions!

Un tableau à une seule dimension contient un certain nombre de valeurs d’un type défini, toutefois il est possible d’avoir un tableau de tableaux! Donc un tableau contenant des tableaux du type préalablement défini. Ne vous en faites pas, ce n’est pas si complexe à visualiser mais la difficulté se trouve plutôt lorsque l’on veut les remplir et les lire. Voici donc une représentation graphique pour tenter de vous donner un coup de main.

2D array

Simplement pour vous donner une idée de ce qu’un tableau à plusieurs dimensions a l’air, la première colonne à gauche est en fait notre tableau à une dimension, toutefois ce dernier ne contient aucune valeur mais plutôt les autres tableaux (ou rangées). Les rangées sont les tableaux qui contiennent réellement les valeurs. Ça fait beaucoup de tableaux!

Comment créer un tableau à deux dimensions? Ce n’est pas bien plus complexe que de créer un tableau en ayant une seule, voyez la variante dans le code ci-dessous.

Dim MultiDimensionalArrayOfInt = New Integer(10, 10) {}

Assez similaire n’est-ce pas? La seule différence est que vous devez ajouter un autre nombre à la suite de, dans ce cas présent, 10. Ceci pour indiquer à Visual Basic que vous voulez 11 tableaux de 11 éléments chacun! Vous pourriez déclarer ce tableau avec des valeurs si vous voulez, par exemple : { {0, 32, 323, 7, 43, 32, 12, 23, 392, 3, 12}, …}. Toutefois, de la façon dont nous l’avons déclaré, ce tableau de tableaux sera vide et c’est pour cette raison que nous devons le remplir!

Maintenant, pour la partie la plus complexe : comment mettre des valeurs dans le tableau à deux dimensions?

Module Program
    Dim _Rnd As Random

    Sub Main()
        _Rnd = New Random()

        Console.WriteLine("---MultiDimensional Array example---")
        Dim MultiDimensionalArrayOfInt = New Integer(10, 10) {}

        'Boucles imbriquées pour remplir le tableau à deux dimensions
        For Index As Integer = 0 To 10 Step 1
            For InnerIndex As Integer = 0 To 10 Step 1
                MultiDimensionalArrayOfInt(Index, InnerIndex) = _Rnd.Next(0, 1000)
            Next
        Next

        'Boucles imbriquées pour lire les valeurs dans le tableau à deux dimensions
        For Index As Integer = 0 To 10 Step 1
            Console.WriteLine("Row number {0}", Index)
            For InnerIndex As Integer = 0 To 10 Step 1
                Console.WriteLine(MultiDimensionalArrayOfInt(Index, InnerIndex))
            Next
        Next

        Console.ReadKey()
    End Sub
End Module

Les boucles imbriquées peuvent être plus difficiles à comprendre au début, donc ne vous en faites pas si vous n’êtes pas tout à fait à l’aise avec pour le moment. Nous en verrons à plusieurs autres reprises durant les tutoriels futurs. Ce que je vous conseil à nouveau est de mettre un breakpoint et d’effectuer une révision étape par étape du code à l’aide de Step Over (F10) pour voir ce qui se passe réellement. N’oubliez pas que la première boucle parcours ici les rangées et que la deuxième boucle parcours les colonnes de chaque rangée. Dans notre exemple, les deux arrays sont de la même longueur, toutefois, si vous voulez prendre des tableaux plus petits ou encore plus grands, vous devrez modifier “To 10” pour aller jusqu’à la fin ou encore mettre ArrayOfInt.Length – 1.

Array fetch result

Dans cette capture d’écran, vous pouvez voir les rangées et les colonnes, la première colonne représente le tableau contenant chacun des autres tableaux qui sont eux, les rangées.

Les tableaux restent un sujet assez difficile d’approche en programmation, si vous sentez le besoin, n’hésitez pas à aller sur le site Web de MSDN pour plus d’informations ou encore vous pouvez poser votre question ci-dessous!

Dans le prochain tutoriel, nous allons pousser ce sujet un peu plus loin et voir d’autres types de collections qui seront très utiles aussi et qui peuvent modifier leur taille en mémoire au fur et à mesure qu’ils se remplissent. Elles sont connues sous le nom plus précis de structures de données.

YouTube

Next article Comment changer la langue de l'interface dans Visual Studio
Previous article Concaténation de strings et le StringBuilder en Visual Basic/C#

Related posts

0 Comments

No Comments Yet!

You can be first to comment this post!

Leave a Comment

Your data will be safe! Your e-mail address will not be published. Also other data will not be shared with third person. Required fields marked as *