Les tableaux multidimensionnels et les tableaux jagged (jagged arrays) sont deux constructions différentes pour travailler avec des collections dans Visual Basic. À l'origine, VB (VB6, .NET) ne prenait en charge que les tableaux rectangulaires (deux dimensions, trois dimensions). Plus tard, .NET a introduit le support des tableaux jagged en tant qu'objet distinct.
Les tableaux multidimensionnels traditionnels (par exemple, Dim matrix(2,3) As Integer) sont utiles lorsque la table de données doit être rectangulaire. Les tableaux jagged ont été introduits dans VB.NET avec la possibilité de créer des lignes déchirées : le nombre d'éléments dans le tableau interne peut varier.
Un choix inapproprié de la méthode conduit soit à une utilisation inefficace de la mémoire (par exemple, les lignes de tableaux rectangulaires sont toutes fixes), soit à une logique d'accès aux éléments incorrecte (ce qui peut entraîner une erreur d'accès hors limites). Souvent, les gens confondent la syntaxe et les méthodes d'initialisation.
On choisit les tableaux rectangulaires (multidimensionnels) si le contenu est toujours complet (par exemple, un terrain de jeu). Les tableaux jagged sont utilisés lorsque les lignes ont des longueurs différentes (par exemple, les listes d'élèves dans différentes classes). L'accès aux éléments entre les deux diffère.
Exemple de code :
' Tableau multidimensionnel Dim rect(1, 2) As Integer ' 2 lignes, 3 colonnes (indexation à partir de zéro) rect(0,0) = 1 : rect(0,1) = 2 : rect(0,2) = 3 rect(1,0) = 4 : rect(1,1) = 5 : rect(1,2) = 6 ' Tableau jagged Dim jagged(2)() As Integer ' tableau de 3 éléments, chacun étant un tableau jagged(0) = New Integer() {1, 2} jagged(1) = New Integer() {3, 4, 5} jagged(2) = New Integer() {6} Console.WriteLine(rect(1,2)) ' 6 Console.WriteLine(jagged(1)(2)) ' 5
Caractéristiques clés :
Peut-on créer un tableau jagged avec Dim a(2,3) As Integer ?
Réponse : Non, cela créera un tableau rectangulaire. On définit les tableaux jagged comme suit : Dim a(2)() As Integer ou Dim a As Integer()().
Que se passe-t-il si l'on n'initialise pas le tableau interne de la structure jagged et que l'on essaie d'accéder à un élément ?
Réponse : Cela déclenchera une exception NullReferenceException, car le tableau interne n'est pas créé.
Quelle est la différence de syntaxe pour obtenir la longueur d'une dimension d'un tableau unidimensionnel et d'un tableau jagged ?
Réponse : Pour un tableau rectangulaire : a.GetLength(0) (nombre de lignes), a.GetLength(1) (nombre de colonnes). Pour un tableau jagged : a.Length (nombre de lignes), a(i).Length (nombre d'éléments dans la ligne i).
Pour stocker une liste d'élèves par classe, un tableau rectangulaire (10, 30) a été choisi : les éléments vides ne sont pas utilisés, certaines classes comptent moins d'élèves que le maximum.
Avantages :
Inconvénients :
Un tableau jagged est utilisé : chaque tableau interne est une liste réelle d'élèves d'une classe, optimisant la mémoire et simplifiant le traitement.
Avantages :
Inconvénients :