|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
De mogelijkheid bestaat een array te creëren met als elementen andere arrays. Je kan hier spreken over een "jagged array" ( of een array van arrays ). Deze komen van pas wanneer je een collectie van arrays ( dus van andere collecties ) wil beheren.
Om dit te verwezenlijken heb je het datatype Array nodig. Je declareert de arrayvariabele met elementen van het datatype Array. Visual Basic 2010 Broncode Module Example Sub Main() Dim names() As String = { "Brussels", "Antwerp", "Ghent"} Dim zipCodes() As Integer = {1000, 2000, 0} Dim cities(1) As Array cities(0) = names cities(1) = zipCodes Console.WriteLine(names(1)) Console.WriteLine(cities(0)(1)) cities(1)(2) = 9000 Console.WriteLine(zipCodes(2)) Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output Antwerp
Antwerp
9000 Opgelet : een arrayvariabele bevat steeds een verwijzing naar een array, dus een array van arrays bevat niet die arrays zelf, maar bevat er verwijzingen naartoe.
Een verwijzing ( referentie ) naar een array kan je bekomen door gewoon de arrayvariabele-identifier te gebruiken ( zoals in regels (1) en (2) ). Of in het geval van een array van arrays bekom je dergelijke referentie van een array door het gerelateerde element aan te spreken. Zo komt het dat cities of cities(0) bijvoorbeeld naar hetzelfde ( naar dezelfde array ) verwijzen.
Meervoudige indexverwijzingen ( zoals in regels (4) en (5) ) kunnen verwarrend zijn, maar moet je gewoon stapsgewijs ontleden om ze te begrijpen. Als cities en cities(0) naar hetzelfde verwijzen bijvoorbeeld, dan is cities(0)(1) of names(1) dus ook een verwijzing naar hetzelfde element uit de cities array. Regels (3) en (4) geven immers hetzelfde resultaat. 7.12.1. OefeningOpgave :
Maak een programma naar onderstaand voorbeeld ( zie programmaverloop ) gebruik makende van drie tabellen : - één tabel voor de studenten namen ( één dimensional String array ) - één tabel voor de studenten punten ( meer dimensionale Integer array ) - één tabel voor de studenten ( array van arrays, verwijzend naar bovenstaande arrays )
Eens de drie tabellen zijn aangemaakt, mag je in het programma enkel nog gebruik maken van de laatste tabel ( array van arrays ).
Stockeer ook de gemiddeldes in de studenten punten tabel. Console Application Output Student Count ? 2
Topic Count ? 2
Name Student 1 ? John
John Score Topic 1 ? 4
John Score Topic 2 ? 6
Name Student 2 ? Paul
Paul Score Topic 1 ? 6
Paul Score Topic 2 ? 8
Name : John
Score Topic 1 : 4
Score Topic 2 : 6
Average Score : 5
Name : Paul
Score Topic 1 : 6
Score Topic 2 : 8
Average Score : 7 Oplossing : Visual Basic 2010 Broncode Module ExerciseSolution Sub Main() Console.Write( "Student Count ? ") Dim studentCount As Integer = Console.ReadLine() Console.Write( "Topic Count ? ") Dim topicCount As Integer = Console.ReadLine() Console.WriteLine() Dim studentUpperbound As Integer = studentCount - 1 Dim names(studentUpperbound) As String Dim topicUpperbound As Integer = topicCount Dim scores(studentUpperbound, topicUpperbound) As Double Dim students(1) As Array Const namesIndex As Integer = 0, scoresIndex As Integer = 1 students(namesIndex) = names students(scoresIndex) = scores Dim studentIndex, topicIndex As Integer For studentIndex = 0 To studentUpperbound Console.Write( "Name Student " & (studentIndex + 1) & " ? ") students(namesIndex)(studentIndex) = Console.ReadLine() For topicIndex = 0 To topicUpperbound - 1 Console.Write(students(namesIndex)(studentIndex) & _ " Score Topic " & (topicIndex + 1) & " ? ") students(scoresIndex)(studentIndex, topicIndex) = _ Console.ReadLine() Next Console.WriteLine() Next For studentIndex = 0 To studentUpperbound For topicIndex = 0 To topicUpperbound - 1 students(scoresIndex)(studentIndex, topicUpperbound) += _ students(scoresIndex)(studentIndex, topicIndex) Next students(scoresIndex)(studentIndex, topicUpperbound) /= _ topicUpperbound Next Console.WriteLine() For studentIndex = 0 To studentUpperbound Console.WriteLine( "Name : " & students(namesIndex)(studentIndex)) For topicIndex = 0 To topicUpperbound - 1 Console.WriteLine( "Score Topic " & (topicIndex + 1) & " : " & _ students(scoresIndex)(studentIndex, topicIndex)) Next Console.WriteLine( "Average Score : " & _ students(scoresIndex)(studentIndex, topicUpperbound)) Console.WriteLine() Next Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|