# Visual Basic/Arrays
## Inleiding arrays

Soms heb je meerdere variabelen met dezelfde betekenis nodig. Stel: je bent leraar en wilt de resultaten van een proefwerk bijhouden voor je twintig leerlingen. Je kunt dan 20 variabelen aanmaken, punt01 t/m punt20. Maar dat is wel heel omslachtig; het is veel beter om die cijfers in een array te zetten.
Stel je voor dat je zonder array werkt en dat je bijvoorbeeld voor alle werknemers in een bedrijf bij moet houden hoeveel uur ze hebben gewerkt. Je hebt dan voor iedere werknemer een variabele nodig. Bij een klein bedrijf (bijvoorbeeld 5 werknemers) zou dat nog wel gaan, maar stel je een bedrijf voor met 2000 werknemers... En wat doe je als er een werknemer bijkomt of het bedrijf verlaat? Dan moet je steeds het programma aanpassen. En dat voor alle plaatsen waar je deze gegevens gebruikt. Een fout is dus snel gemaakt. En daar komen arrays om de hoek kijken, die het leven een stuk eenvoudiger maken.
Een array is eigenlijk een lijst variabelen die je benadert met een index. Vergelijk het met een boek waarvan je de inhoud benadert met het nummer van de pagina. Op iedere bladzijde staat het punt van een leerling. Zo werkt een array eigenlijk ook.
Een array kan van ieder type zijn: Integer, String, Double, zelfs Object.
De elementen van een array worden benaderd met een numerieke index, b.v. punt(5). Let op: dit is niet het vijfde, maar het zesde element van het array, want de telling begint met 0 en niet met 1.

## Het declareren van een array

Een array wordt, net als een gewone variabele, gedeclareerd met de Dim-instructie. Het formaat is:
Neem als voorbeeld een klas met 20 leerlingen waarvan de punten worden bijgehouden in een array. De declaratie van dat array gebeurt als volgt:
Hiermee definieer je een array van 20 elementen met als index 0 t/m 19. Let dus goed op: de bovengrens in de definitie is 1 minder dan het aantal elementen. Wat dat betreft wijkt Microsoft af van de oudere versies van Basic, waar de index met 1 begin i.p.v. met 0.

## Het gebruiken van een array

Je kunt als volgt heel gemakkelijk het gemiddelde van alle punten berekenen:
Probeer je eens voor te stellen hoe je dit moet programmeren met 20 variabelen (of 200, of 2000....).

## Initialiseren van arrays

In een Dim-instructie kun je aan een variabele een beginwaarde geven (zie de eerste regel van het voorbeeld hierboven). Dit is ook mogelijk bij een array. Het formaat hiervan is:
Bijvoorbeeld:
Het aantal elementen hoef je niet op te geven, dat wordt bepaald door het aantal elementen tussen accolades.

## De limieten van het array

Het eerste element van een array heeft index 0 en het laatste element index (aantal elementen - 1)
Er is een maximum aan het aantal elementen van een array. Omdat de index een Integer is, heeft deze een bereik van 0 t/m 2^31-1 ofwel 4.294.967.295. Het maximum aantal elementen is dus 4.294.967.296.
De onder- en bovengrens van een array achterhaal je met de functies GetLowerBound en GetUpperBound.
In ons voorbeeld levert punt.GetLowerBound(0) de waarde 0 op en punt.GetUpperBound(0) de waarde 19. Het bepalen van het gemiddelde kan dus ook als volgt gebeuren:
Het voordeel is dat bij een aanpassing van het aantal elementen in het array punt dit stukje programma niet aangepast hoeft te worden. Deze constructie is niet alleen gemakkelijker, maar voorkomt later ook fouten als het programma aangepast moet worden.
De parameter 0 geeft aan dat de grens van de eerste dimensie van het array moet worden teruggegeven. Een array kan ook meerdere dimensies bevatten en door de 0 b.v. te vervangen door 1 krijg je de grens van de tweede dimensie van het array. Meerdimensionale array worden verderop behandeld.
Het aantal elementen van een array krijg je door 1 op te tellen bij de bovengrens, maar er bestaat ook een aparte functie voor:
levert het aantal elementen in het array punt, bijvoorbeeld:

## Meerdimensionale arrays

Stel, de leraar wil de punten bewaren van de vakken Nederlands, Engels, Frans en Duits. Je kunt dan vier aparte arrays maken, maar het is ook mogelijk om één meerdionsionale array te maken. Dit doe je als volgt:
Je krijgt dan een tabel met 20 rijen en 4 kolommen. Iedere rij bevat de punten van één leerling en iedere kolom bevat de punten van een bepaald vak voor alle leerlingen.
GetUpperBound(0) geeft de bovengrens van de leerlingen (19). GetUpperBound(1) geeft de bovengrens van de vakken (3).
Op dezelfde manier kun je dimensies toevoegen. Stel je wilt de cijfers bijhouden van vier semesters en de eindtoets, dan kun je als volgt een drie-dimensionale array declareren:
In theorie kun je nog meer dimensies toevoegen, maar drie-dimensionale arrays zijn al zeldzaam, laat staan arrays met meer dimensies.
Een tweedimensionale array kun je als volgt initialiseren:
Let op dat je een komma moet plaatsen tussen de haakjes achter de naam van het array. Zo weet de compiler dat dit een tweedimensionale array is. De waarden geef je per rij op (met iedere rij tussen accolades).

## Aantal dimensies opvragen

Je kunt het aantal dimensies als volgt opvragen:
Je krijgt dan de volgende antwoorden:

## De grootte van een array wijzigen

Het is mogelijk om een array groter of kleiner te maken. Dat kan met de opdracht ReDim. Het formaat is:
Hiermee pas je de grootte van het array punt aan zodat deze 10 resp. 30 getallen kan bevatten.
Bij het aanpassen van de grootte van een array op deze manier gaat de inhoud verloren. Dit is te voorkomen door het sleutelwoord Preserve te gebruiken, bijvoorbeeld:
Dit gaat redelijk langzaam, omdat eerst een nieuw array wordt aangemaakt. Daarna wordt het oude array element voor element gekopieerd naar het nieuwe array en tot slot wordt het oude array verwijderd en de verwijzing naar het oude array vervangen door de verwijzing naar het nieuwe array. Het grote voordeel is dat de grootte van het array dynamisch aangepast kan worden, zo nodig met behoud van de gegevens.
In het begin is gesproken over het array met het gewerkte aantal uren per werknemer. Als een apart bestand het aantal werknemers is opgenomen, kan een programma dit bestand lezen en met dat aantal het gewenste array re-dimensioneren, zodat altijd met de juiste array-grootte wordt gewerkt. Op deze manier hoeft het programma niet aangepast te worden als het aantal werknemers wijzigt.