n00b pro

05. arrays

Dit hoofdstuk is onderdeel van de cursus C#. Andere cursussen in dezelfde reeks: HTML, CSS, Javascript, Ontwikkelomgeving.

Op Youtube

Deze video maakt deel uit van de IIP playlist van de Youtube channel van Rogier van der Linde.

Let op: deze video's zijn al een paar jaar oud, dus hier en daar kunnen kleine afwijkingen voorkomen met deze cursus, die wel altijd up-to-date is.

https://www.youtube.com/watch?v=mi4zT5SC7Og

Wat is een array

Arrays maken deel uit van een breder concept, collecties genoemd. .NET biedt verschillende soorten collecties aan als List, Stack, Queue enz... — zie dit overzicht. C# als taal kent maar één soort collectie, de array.

Een array is een variabele die verwijst naar een genummerde reeks waarden, startend bij index 0:

array

Arrays hebben volgende fundamentele eigenschappen:

⚠️ alle elementen van een array hebben hetzelfde type

Declaratie en initialisatie

Voorbeelden:

int[] cijfers = new int[6]; // array van 6 ints
string[] namen = new string[20]; // array van 20 strings
bool[] weekdagenOpen = new bool[7]; // array van 7 bools

Je kunt meteen beginwaarden opgeven tussen accolades, gescheiden met komma's:

int[] getallen = { 5, 8, 3, 12, 7 };
double[] kommagetallen = { 1.5, 10.2, 19.85, 3.1415 };
char[] letters = { 'a', 'b', 'c', 'd' };
string[] fruit = { "appel", "banaan", "citroen" };

Waarden instellen en veranderen

Je kan geen elementen toevoegen of verwijderen in een array; het aantal elementen is vast. Je kan wel de waarde van een element veranderen:

int[] getallen = new int[6]; // array van 6 ints, van 0 tot 5
getallen[0] = -2;  // zet getal -2 op eerste plaats
getallen[2] = 7;   // zet getal 7 op derde plaats
getallen[4] = 1;  // zet getal 1 op vijfde plaats
getallen[5] = 11;  // zet getal 11 op zesde (laatste) plaats

string[] namenlijst = new string[5]; // array van 5 strings, van 0 tot 4
namenlijst[0] = "Jef";
namenlijst[1] = "Yasmina";
namenlijst[4] = "Long";

⚠️ plaatsen worden genummerd vanaf 0
⚠️ type int heeft standaardwaarde 0
⚠️ type string heeft standaardwaarde null

Arrays gebruiken

één element opvragen

Je kunt een waarde uitlezen uit een array op basis van de index van dit element (eerste = index 0):

string[] kleuren = { "blauw", "groen", "rood", "geel" };
string eerste = kleuren[0]; // blauw; eerste element heeft index 0
string tweede = kleuren[1]; // groen; tweede element heeft index 1
string laatste = kleuren[kleuren.Length - 1]; // geel; manier om laatste element op te vragen

lengte opvragen

Met de lengte wordt het aantal beschikbare plaatsen bedoeld, niet het aantal plaatsen dat effectief een waarde gekregen heeft. Gebruik de Length property:

int[] getallen = new int[7]; // array met 7 plaatsen → lengte is 7
getallen[0] = 10;
getallen[2] = 5;
getallen[5] = 7;
int lengte = getallen.Length;
Console.WriteLine($"De lengte van de array is: {lengte}");
De lengte van de array is: 7
resultaat in de console

overlopen met for-loop

Gebruik de for-lus met de Length property als je de index van elk element in de array nodig hebt:

string[] namen = { "Zakaria", "Nelly", "Killian", "Chun" };
for (int i = 0; i < namen.Length; i++)
{
    string naam = namen[i]; // element op index i
    Console.WriteLine($"{i + 1}. {naam}");
}
1. Zakaria
2. Nelly
3. Killian
4. Chun
resultaat in de console

inlezen met for-loop

Codevoorbeeld voor het inlezen van een array:

string[] namen = new string[4];
int len = namen.Length;
for (int i = 0; i < len; i++) {
    Console.Write($"Geef naam {i + 1} van {len}: ");
    namen[i] = Console.ReadLine();
}
Console.WriteLine("Bedankt!");
Geef naam 1 van 4: Kawtar
Geef naam 1 van 4: Arne
Geef naam 1 van 4: Dmitri
Geef naam 1 van 4: Yolanthe
Bedankt!
resultaat in de console

overlopen met foreach-loop

Gebruik foreach als je de index van de elementen niet nodig hebt:

int[] numbers = { 2, 5, 9, 3, 4, 6, 7 };

foreach (int num in numbers)
{
    Console.WriteLine(num);
}
2
5
9
3
4
6
7
resultaat in de console

Properties en methodes

Array class

De .NET Array class biedt volgende properties en methodes:

Property Omschrijving
Length het aantal beschikbare plaatsen in de array
Methode Omschrijving
Clear() reset alle elementen naar de defaultwaarde (0 voor ints, null voor strings enz...)
Contains() controleert of de array een gegeven waarde bevat
IndexOf() zoekt de positie (index) van een gegeven waarde; -1 indien niet gevonden
Array.Reverse() keert de volgorde van de elementen om
Array.sort() sorteert een gegeven array
String.split() splitst een string in een array
String.join() voegt een array samen tot een string

voorbeeld: nagaan of waarde voorkomt in een array met Contains()

Gebruik Contains() (returnwaarde true of false):

string[] fruit = { "appel", "banaan", "citroen" };
bool gevonden = fruit.Contains("citroen");
if (gevonden)
{
   Console.WriteLine("De array bevat het woord \"citroen\"");
}

voorbeeld: positie van een waarde in een array met IndexOf()

Gebruik IndexOf() om de positie te vinden (-1 indien niet gevonden):

string[] fruit = { "appel", "banaan", "citroen" };
int pos = fruit.IndexOf("citroen");
if (pos > -1)
{
   Console.WriteLine($"Het woord \"citroen\" is gevonden op positie {pos}");
}

voorbeeld: array sorteren met Sort()

Gebruik Array.Sort() om een array oplopend te sorteren:

int[] getallen = { 7, 3, 9, 2, 6 };
Array.Sort(getallen); // sorteer getallen van klein naar groot

foreach (int getal in getallen)
{
   Console.WriteLine(getal);
}
   
2
3
6
7
9
resultaat in de console

Gebruik in combinatie met Array.Reverse() om een array aflopend te sorteren:

int[] getallen = { 7, 3, 9, 2, 6 };
Array.Sort(getallen); // sorteer getallen van klein naar groot
Array.Reverse(getallen); // keer volgorde om

foreach (int getal in getallen)
{
   Console.WriteLine(getal);
}
2
3
6
7
9
resultaat in de console

String class

De .NET String class biedt volgende methodes:

Methode Omschrijving
split() splitst een string in een array
join() voegt een array samen tot een string

voorbeeld: array samenvoegen tot een string

Gebruik string.Join():

int[] getallen = { 5, 7, 12, 8, 3 }; // → int[] array
string samengevoegd = string.Join(", ", getallen); // "5, 7, 12, 8, 3" → één string
Console.WriteLine(samengevoegd);
5, 7, 12, 8, 3
Join() voorbeeld met array

voorbeeld: string rond spaties splitsen naar een array

string zin = "dit is een zin met meerdere woorden";
string[] woorden = zin.Split(' '); // verdeel zin in woorden
foreach (string woord in woorden)
{
   Console.WriteLine(woord);
}
dit
is
een
zin
met
meerdere
woorden
resultaat in de console

voorbeeld: string rond karakters splitsen naar een array

Je kan als parameter van Split() een array van karakters opgeven waarrond gesplitst moet worden:

string txt = "0477/234.56.78"; // → één string
string[] parts2 = txt.Split(new char[] { '/', '.' }); // { "0477", "234", "56", "78" } → string[] array

LINQ extensie methodes

.NET LINQ biedt ook een hoop extensie methodes die je kan gebruiken,
zie 02. NET classes - LINQ extensie methodes voor collecties