Multidimensionale arrays en jagged arrays zijn twee verschillende constructies voor het werken met collecties in Visual Basic. Oorspronkelijk ondersteunde VB (VB6, .NET) alleen rechthoekige (tweedimensionale, driedimensionale) arrays. Later in .NET kwam ondersteuning voor jagged arrays als een apart object.
Traditionele multidimensionale arrays (bijvoorbeeld Dim matrix(2,3) As Integer) zijn nuttig wanneer een gegevensmatrix altijd rechthoekig moet zijn. Jagged arrays werden geïntroduceerd in VB.NET met de mogelijkheid om onregelmatige rijen te creëren: het aantal elementen in de interne array kan verschillen.
Een verkeerde keuze van de aanpak leidt tot een inefficiënt geheugenverbruik (bijvoorbeeld, bij rechthoekige arrays zijn alle rijen vast) of tot onjuiste logica voor toegang tot elementen (je kunt een out-of-bounds fout krijgen). Vaak worden syntaxis en initialisatie-methoden door elkaar gehaald.
Rechthoekige (multidimensionale) arrays worden gekozen als de inhoud altijd vol is (bijvoorbeeld een speelveld). Jagged arrays worden gebruikt wanneer rijen verschillende lengtes hebben (bijvoorbeeld lijsten van leerlingen per klas). Toegang tot elementen verschilt tussen de twee.
Voorbeeldcode:
' Multidimensionale array Dim rect(1, 2) As Integer ' 2 rijen, 3 kolommen (indexering vanaf nul) rect(0,0) = 1 : rect(0,1) = 2 : rect(0,2) = 3 rect(1,0) = 4 : rect(1,1) = 5 : rect(1,2) = 6 ' Jagged array Dim jagged(2)() As Integer ' array van 3 elementen, elk een array 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
Belangrijke kenmerken:
Kan een jagged array worden gedefinieerd met Dim a(2,3) As Integer?
Antwoord: Nee, dit creëert een rechthoekige array. Jagged arrays worden zo gedefinieerd: Dim a(2)() As Integer of Dim a As Integer()().
Wat gebeurt er als je de interne array van de jagged structuur niet initialiseert en probeert toegang te krijgen tot een element?
Antwoord: Er wordt een NullReferenceException opgegooid, omdat de interne array niet is aangemaakt.
Wat is het verschil in syntaxis voor het verkrijgen van de lengte van een een-dimensionale array en een jagged array?
Antwoord: Voor rechthoekige: a.GetLength(0) (aantal rijen), a.GetLength(1) (aantal kolommen). Voor jagged: a.Length (aantal rijen), a(i).Length (aantal elementen in rij i).
Voor het opslaan van een lijst leerlingen per klas werd een rechthoekige array (10, 30) gekozen — lege elementen worden niet gebruikt, sommige klassen hebben minder leerlingen dan het maximale aantal.
Voordelen:
Nadelen:
Er wordt een jagged array gebruikt: elke interne array is een echte lijst leerlingen van de klas, optimalisatie qua geheugen en eenvoud in verwerking.
Voordelen:
Nadelen: