Hoorcollege 7 Collections, arrays
Programma ‘Snowflakes’ Sneeuwvlok object
SnowFlakes programma class MyGame { Snowflake snowflake1; Snowflake snowflake2; Snowflake snowflake3; Snowflake snowflake4; Snowflake snowflake5; Snowflake snowflake6; Snowflake snowflake7; Snowflake snowflake8; Snowflake snowflake9; … } Dat kan handiger!
Collections Worden gebruikt om lijsten of verzamelingen van objecten/variabelen te representeren Voorbeelden van Collection klassen: List, Set, Dictionary…
Collections Voorbeeld: de List klasse – Uit System.Collections.Generic Declaratie: Initialisatie: List snowflakes; snowflakes = new List (); Type van objecten in de lijst.
Collections Wat kan List bijvoorbeeld allemaal? – Lengte opvragen – Element ergens in de lijst toevoegen – Element aan het eind toevoegen List heeft een type-parameter – We noemen List ook wel een generiek type int lengte = snowflakes.Count; snowflakes.Insert(1, new Snowflake(…)); snowflakes.Add(new Snowflake(…));
Vullen en langslopen van een List for (int i = 0; i < 500; i++) snowflakes[i].Draw(gameTime, spriteBatch); snowflakes = new List (); Texture2D sprite; sprite = Content.Load ("spr_snowflake"); for (int i = 0; i < 500; i++) { Snowflake flake = new Snowflake(sprite); snowflakes.Add(flake); } Geeft aan welk element In de lijst we willen hebben We moeten wel steeds het aantal vlokken aangeven…
Langslopen van een List Speciale constructie: foreach Letterlijk: ‘doe iets voor elk object in de lijst’ Kan gebruikt worden voor alle Collection klassen for (int i = 0; i < nrOfFlakes; i++) snowflakes[i].Draw(gameTime, spriteBatch); foreach (Snowflake flake in snowflakes) flake.Draw(gameTime, spriteBatch);
IList interface List heeft een soort superklasse IList Dus dit mag ook: IList is een interface Verschil interface/klasse: – Keyword ‘virtual’ niet nodig in een interface – Een klasse mag meerdere interfaces implementeren IList snowflakes; snowflakes = new List ();
Interfaces Een interface definieert methoden en properties… Maar implementeert ze niet! Ook heeft een interface geen membervariabelen Klasse die een interface implementeert moet alle methoden/properties bevatten die in die interface gedefinieerd zijn
IList/ICollection interface ICollection – Volgorde van gegevens is niet belangrijk – Voorbeeld: alle items in de inventory van de speler IList – Gegevens die in een lineaire volgorde staan – Voorbeeld: de achtergrondlagen in de volgorde waarin ze getekend moeten worden
ICollection interface Ziet er zo uit: interface ICollection { void Add(E x); bool Remove(E x); bool Contains(E x); int Count {get;}; // een read-only property void Clear(); … }
IList interface interface IList : ICollection { E this [int n] {get; set;}; // notatie voor de indicering int IndexOf(E x); void Insert(int n, E x); void RemoveAt(int n); … } IList interface is ook Een ICollection!
Andere interfaces ISet – De klassieke verzameling – Mag geen dubbele elementen bevatten IDictionary – Een soort array, maar dan anders – Indicering kan met elk type – Bijvoorbeeld string IDictionary vertaler = new Dictionary (); vertaler["hallo"] = "hello"; vertaler["het spel"] = "the game";
Arrays Een array is een lijst van objecten van hetzelfde type. – Simpele vorm van een collection Voorbeeld van een declaratie van een array: int [] tabel; Variabelenaam Geeft aan dat we met een array te maken hebben Type van de waarden in de array
Arrays int [] tabel; tabel = new int[5]; tabel 0 length Declaratie Initialisatie Aantal elementen in de array Bevat aantal elementen Let op: na initialisatie kan het aantal elementen niet meer veranderd worden! – In tegenstelling tot Collections!
x 0 length Arrays int [] tabel; tabel = new int[5]; tabel[3] = 12; int x = tabel[3] + 5; tabel[1] = tabel[3]/2; x = tabel.Length; tabel Property voor toegang tot het aantal elementen 5 6
Arrays Stel we vullen de array als volgt: Dit kan ook een stuk handiger: int [] tabel; tabel = new int[5]; tabel[0] = 42; tabel[1] = 42; tabel[2] = 42; tabel[3] = 42; tabel[4] = 42; int nummer; for (nummer=0; nummer<tabel.Length; nummer++) tabel[nummer] = 42;
Publieksvraag Schrijf een aantal opdrachten die de tabel vult met de waarden 1 t/m 5 int nummer; for (nummer=0; nummer<tabel.Length; nummer++) tabel[nummer] = nummer+1;
Publieksvraag De reeks van Fibonacci is als volgt gedefinieerd: – f(0) = 1, f(1) = 1 – f(n) = f(n-2) + f(n-1) voor n > 1 Voorbeeld: – 1, 1, 2, 3, 5, 8, 13, 21, enzovoorts Schrijf een serie opdrachten die een array van grootte 20 met de reeks van Fibonacci vult.
Oplossing int[] fib; fib = new int[20]; fib[0] = 1; fib[1] = 1; for (int nummer=2; nummer<fib.Length; nummer++) fib[nummer] = fib[nummer-1] + fib[nummer-2];
Arrays van andere typen Arrays kunnen van allerlei typen gemaakt worden: int[] fibonacci; float[] floatArray; char[] karakterLijst; Vector2[] posities; GameObject[] gameObjecten; Type mag ook best een struct zijn. Of zelfs een eigen klasse!
Array van getallen tabel int [ ] tabel; new int [5];tabel = length5
Array van struct-objecten tabel Vector2 [ ] tabel; new Vector2[5]; tabel = length5
Array van class-objecten tabel GameObject [ ] tabel; new GameObject[5]; tabel = length5 for (int t=0; t<5; t++) tabel[t] = new GameObject();
Array als parameter tabel length int Kleinste ( int [ ] tabel ) { } int resultaat; return resultaat; if (tabel [t] < resultaat) resultaat = tabel [t]; for (t=0; t<tabel.Length; t++) int t; resultaat =tabel [0];
Deel van de array doorzoeken tabel length int Kleinste ( int [ ] tabel ) { } int resultaat; return resultaat; if (tabel [t] < resultaat) resultaat = tabel [t]; for (t=0; t<tabel.Length; t++) int t; resultaat =tabel [0]; aantal, int aantal) static
Syntax van array-type
Twee-dimensionale array tabel int [, ] tabel; new int [5,3]; tabel = length tabel.GetLength(0) tabel.GetLength(1)
Array van arrays tabel int [ ] [ ] tabel; new int[5][2]; tabel = length5
Drie-dimensionale array tabel int [,, ] tabel; new int [5,3,2]; tabel = length
Initialisatie van arrays string [ ] woorden = { "aap", "noot", "mies" }; int [ ] maand = { 31,28,31,30,31,30,31,31,30,31,30,31 }; int [, ] = { {1,2,3,4}, {5,6,7,8} };
De volgende keer Jewel Jam