Werken met arrays
Last updated
Last updated
Net zoals we hebben gezien dat de Math-klasse een heleboel nuttige methoden in zich heeft, zo heeft ook iedere array een aantal methoden waar handig gebruik van gemaakt kan worden.
Om deze methoden te kunnen gebruiken moet je bovenaan je file de volgende lijn toevoegen:
using System.Linq;
:
Wanneer je een array hebt gemaakt kan je met de IntelliSense van Visual Studio bekijken wat je allemaal kan doen met de array:
Al deze methoden hier beschrijven zal ons te ver nemen. De volgende methoden zijn echter zeer handig om te gebruiken:
Max()
, Min()
, Sum()
en Average()
.
Volgende code geeft bijvoorbeeld het grootste getal terug uit een array genaamd "leeftijden":
Alle C# arrays erven over van de System.Array
klasse (klasse en overerving zien we later), hierdoor kan je zaken zoals Length
gebruiken op je array. De System.Array
klasse heeft echter ook nog een hoop andere nuttige methoden zoals de BinarySearch()
, Sort()
en Reverse()
methoden. Het gebruik hiervan is steeds dezelfde zoals volgende voorbeelden tonen:
Om arrays te sorteren roep je de Sort()
-methode op als volgt, als parameter geef je de array mee die gesorteerd moet worden.
Volgende voorbeeld toont hier het gebruik van:
Wanneer je de Sort-methode toepast op een array van strings dan zullen de elementen alfabetisch gerangschikt worden.
Met de Array.Reverse()
-methode kunnen we dan weer de elementen van de array omkeren (dus het laatste element vooraan zetten en zo verder:
Een array volledig leegmaken (alle elementen op ‘null’ zetten) doe je met de Array.Clear
-methode, als volgt:
De BinarySearch
-methode maakt het mogelijk om te zoeken naar de index van een gegeven element in een index. Deze methode werkt enkel indien de elementen in de array gesorteerd staan! Je geeft aan de methode 2 parameters mee, enerzijds de array in kwestie en anderzijds het element dat we zoeken. Als resultaat wordt de index van het gevonden element teruggegeven. Indien niets wordt gevonden zal het resultaat -1 zijn.
Volgende code zal bijvoorbeeld de index teruggeven van de kleur "red" indien deze in de array myColors
staat:
Volgend voorbeeld toont het gebruik van deze methode:
In het vorige hoofdstuk vertelden we reeds over het venijn van arrays kopiëren, daar deze 'by reference' worden bewaard. Lijn 2 in deze code creëert dus enkel een alias naar dezelfde array en geen kopie:
Willen we een kopie dan moet dit dus zoals in vorige hoofdstuk manueel gebeuren, of je maakt gebruikt van de Array.Copy()
methode, als volgt:
De methode Array.Copy
vereist minimaal 3 parameters, waaronder de originele array, de doel array (die reeds moet aangemaakt zijn!) alsook hoeveel elementen je uit de originele array wenst te kopieren. Bekijk zeker ook de overloaded versies die deze methode heeft. Zo kan je ook een bepaald stuk van een array kopieren en ook bepalen waar in de doel array dit stuk moet komen.
Het zoeken in arrays kan met behulp van while of for-loops tamelijk snel. Volgend programmatje gaat zoeken of het getal 12 aanwezig is in de array. Indien ja dan wordt de index bewaard van de positie in de array waar het getal staat:
Voorgaande stukje code is de meest naïeve oplossing. Bedenk echter wat er gebeurt indien het getal dat we zoeken 2 of meerdere keren in de array staat. Index zal dan de positie bevatten van de laatst gevonden 12 in de array.
Het is zéér belangrijk dat je vlot dit soort algoritmen kan schrijven, zoals:
Zoeken van elementpositie in array
Tellen hoe vaak een element in een array voorkomt
Elementen in een array 1 of meerdere plaatsen opschuiven
We tonen nu twee voorbeelden van hoe je kan zoeken in een array wanneer we bijvoorbeeld 2 arrays hebben die 'synchroon' zijn. Daarmee bedoel ik: de eerste array bevat producten, de tweede array bevat de prijs van ieder product. De prijs van de producten staat steeds op dezelfde index in de andere array:
We vragen nu aan de gebruiker van welk product de prijs getoond moet worden:
We tonen nu hoe we met for
eerst het juiste product zoeken en dan vervolgens die index bewaren en gebruiken om de prijs te tonen:
Een nadeel van deze oplossing is dat we steeds de hele for
doorlopen (we gebruiken geen break
vanwege een allergie hiervoor bij de auteur). Bij heel lange arrays is dit dus niet erg performant.
Volgende oplossing met een while
toont een performantere oplossing:
Het type string
is niet meer dan een arrays van karakters, char[]
. Om een string per karakter te bewerken is het aanbevolen om deze naar een char-array om te zetten en nadien terug naar een string. Dit kan gebruikmakend van .ToCharArray()
als volgt:
De uitvoer zal worden:Ik ben Tim
.
Ook de omgekeerde weg is mogelijk. De werking is iets anders, let vooral op hoe we de char array doorgeven als argument bij het aanmaken van een nieuwe string
in lijn 3:
De uitvoer van deze code zal zijn: haxlo
.