WPO 10

Als laatste zullen we meerdimensionale arrays behandelen. We zullen ons in dit WPO beperken tot 2D arrays. het gebruik van hogere dimensies verloopt op dezelde manier. In tegenstelling tot lineaire arrays, ttz. arrays met 1 enkele index, hebben meerdimensionale arrays verschillende indices. Hierbij is het dus heel belangrijk bij te houden welke dimensie welke informatie bijhoudt. Over het algemeen worden meerdimensionale arrays met meer dan 3 dimensies niet gebruikt.

Een voorbeeld van meerdimensionale arrays zijn de afbeeldingen in bitmap-formaat. In een afbeelding wordt de informatie in een 3D array bijgehouden. Dankzij de eerste 2 indices kan men de een pixel op een bepaalde x- en y-positie aanspreken. De 3de dimensie van de array geeft de kleur van die ene pixel weer (R,G,B).

Het gebruik van een meerdimensionale array verschilt in weze niet veel van die van een lineaire array. Het enige verschil is het kunnen aanpreken van de verschillende dimensies. Dit wordt weergegeven in onderstaand codefragment.

// create a 2D array of 100 elements, note the ',' inside the brackets double[,] arr = new double[10,10]; // fill our array with some values for (int i=0;i<arr.GetLength(0);i++) { for (int j=0;j<arr.GetLength(1);j++) { arr[i,j] = i+j; } }

Merk op dat we voor elke dimensie een aparte for loop gebruiken. Omdat we over een meerdimensionale array itereren, moeten we voor elke dimensie de lengte opvragen. Dit doen we door de methode "GetLength(int dimensie)" op te vragen. Deze methode retourneert hoeveel cellen er voor die dimensie aanwezig zijn. Om elke dimensie aan te spreken volstaat het om de indices te scheiden door komma's. Elke komma wijst op een extra dimensie.

Het doorgeven van van meerdimensionale arrays aan functies verloopt op een heel gelijkaardige manier als het doorgeven van een lineaire. Dit wordt in onderstaande codefragment geïllustreerd.

//------------------------------------------ private void processArray(double[,] arr) { ... } //------------------------------------------ private double[,] returnArray() { double[,] arr = new double[10,10]; ... return arr; } //------------------------------------------

Meerdimensionale arrays kunnen uiteraard aangemaakt worden van eender welk datatype.

Een laatste stap dat we hier willen behandelen zijn de null-waarden. Arrays kunnen in het algemeen ook gelijkgesteld worden aan null. Null in C# komt overeen met "het bestaat niet". Dit kan een handig mechanisme zijn indien men foutieve waarden uitkomt in een functie en dus niets wilt/kan retourneren. Een eenvoudige test op null laat toe om na te gaan of de array effectief geldige data bevat. Dit wordt hieronder weergegeven.

//------------------------------------------ private double[,] returnArray() { double[,] arr = new double[10,10]; // an error occured during calculations, so make the array null arr = null; return arr; } //------------------------------------------ private void callerFunction() { double[,] arr = returnArray(); if (arr!=null) { // do something with the array } else { MessageBox.Show("The array does not exist!"); } }