C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections Leibniz Universität IT Services Anja Aue
Arrays... speichern mehrere Werte vom gleichen Datentyp. fassen zusammenhängende Werte wie zum Beispiel eine Messreihe zusammen. verwalten eine Menge von Daten, die über ein Index angesprochen werden. basieren auf der definierten Klasse Array. kann ein- oder mehrdimensional sein. C# - Einführung 26.06.12 Seite 2
Eindimensionale Arrays... sind aufeinander gestapelte Behälter gleicher Größe, aber unterschiedlichen Inhalts. sind Listen mit einer bestimmten Anzahl von Einträgen. Die Einträge haben alle den gleichen Datentyp. (0) 1 (1) 2 (2) 3 (3) 4 C# - Einführung 26.06.12 Seite 3
definieren int[] zahlenwerte; float[] messwerte = new float[10]; Datentyp[] variable; Dem Datentyp folgen direkt die eckigen Klammern. Anschließend folgt der frei wählbare Name des Arrays. Ein Array kann gleichzeitig definiert und erzeugt werden. C# - Einführung 26.06.12 Seite 4
erzeugen int[] zahlenwerte; float[] messwerte = new float[10]; zahlenwerte = new int[5];...= new Datentyp[Anzahl]; Mit Hilfe des Schlüsselwortes new wird ein Array von einem bestimmten Datentyp in einer bestimmten Größe erzeugt. Die Größe des Arrays kann durch einen konstanten Wert oder eine Variable festgelegt werden. Die angegebene Größe kann nicht verändert werden. C# - Einführung 26.06.12 Seite 5
Konstante für die Größenangabe nutzen const int MAX_SIZE = 5; int[] werte = new int[max_size]; Die Größenangabe kann nicht innerhalb des Programms verändert werden. Die Konstante muss vor der Nutzung definiert werden. Vorteil: Die Größenangabe des Arrays muss nur an einer Stelle geändert werden. C# - Einführung 26.06.12 Seite 6
automatisch initialisieren int[] zahlenwerte; float[] messwerte = new float[10]; zahlenwerte = new int[5]; Alle Felder sind bei einem Zahlen-Array mit 0 belegt. Referenztypen werden mit Null belegt. C# - Einführung 26.06.12 Seite 7
initialisieren int[] zahlenwerte; float[] messwerte = new float[10]; zahlenwerte = new int[5] { 1, 2, 3, 4, 5 ; In den geschweiften Klammern werden Werte für das Array aufgelistet. Die Elemente in der Liste werden durch Kommata getrennt. Der erste Wert in der Liste wird automatisch dem ersten Feld in dem Array zugewiesen. Durch die Initialisierung wird die Größe des Arrays festgelegt. new int[5] kann durch new int[] ersetzt werden. Die Größe wird durch die Anzahl der Elemente in der Liste festgelegt. C# - Einführung 26.06.12 Seite 8
Elemente eines Arrays int zahl; float[] messwerte = new float[10]; messwerte[0] = (float)zahl; Array[index]; In den eckigen Klammern wird ein Index zur Identifizierung eines Elements in einem Array angegeben. Das erste Element hat den Index 0 und so weiter. C# - Einführung 26.06.12 Seite 9
for-schleife nutzen for (int index = 0; index < zahlenwerte.length; index++) { messwerte[index] = (float) zahlenwerte[index] / 2; Die Methode.Length liefert die Länge aller Dimensionen. Bei einem eindimensionalen Array mit 10 Elementen wird die Größe 10 geliefert. Bei einem mehrdimensionalen Array von 5 x 2 Elementen wird die Größe 10 geliefert. Mit Hilfe der Methode.Rank kann die Anzahl der Dimensionen ermittelt werden. C# - Einführung 26.06.12 Seite 10
foreach-schleife nutzen foreach (float wert in messwerte) { Console.WriteLine(wert + "\n"); foreach (Datentyp Element in Array) Das Array wird vollständig durchlaufen. Der Index wird nicht benötigt. Für jedes Element in dem Array... Das Element muss den gleichen Datentyp wie das Array besitzen. C# - Einführung 26.06.12 Seite 11
Strings string text = "Dies ist ein Text"; string[] wort = new string[10]; foreach(char element in text){ Console.WriteLine(element); wort[0] = "Silber"; wort[1] = "Gold"; for (int index = 0; index < wort.length; index++){ Console.WriteLine(wort[index]); C# - Einführung 26.06.12 Seite 12
als Parameter nutzen private static void arraykopieren(int[] werte) { int[] zahlen = new int[20]; werte.copyto(zahlen, 0); C# - Einführung 26.06.12 Seite 13
Aufruf der Methode static void Main(string[] args) { int[] werte = new int[5]; for (int index = 0; index < werte.getlength(0); index++){ werte[index] = index; arraykopieren(werte); C# - Einführung 26.06.12 Seite 14
Reihenfolge des Arrays umkehren private static void arraykopieren(int[] werte) { int[] messung = new int[20]; Array.Reverse(messung); C# - Einführung 26.06.12 Seite 15
Suche nach einem Array-Elemente private static void arraysuche(){ string[] metalle = new string[10]; metalle[0] = "Silber"; metalle[1] = "Gold"; metalle[2] = "Platin"; metalle[3] = "Palladium"; metalle[4] = "Rhodium"; metalle[5] = "Osmium"; metalle[6] = "Iridium"; metalle[7] = "Ruthenium"; Console.WriteLine("Position " + Array.IndexOf(metalle, "Silber")); C# - Einführung 26.06.12 Seite 16
Array-Elemente sortieren private static void arraysuche(){ string[] metalle = new string[10]; metalle[0] = "Silber"; metalle[1] = "Gold"; metalle[2] = "Platin"; metalle[3] = "Palladium"; metalle[4] = "Rhodium"; metalle[5] = "Osmium"; metalle[6] = "Iridium"; metalle[7] = "Ruthenium"; Array.Sort(metalle); C# - Einführung 26.06.12 Seite 17
Kopie eines Arrays mit Hilfe einer Zuweisung? private static void arraykopieren(int[] werte) { int[] messung; messung = werte; Ein Array wird einem Array zugewiesen. Die Elemente des Arrays werden nicht kopiert. Beide Arrays verweisen auf die gleichen Elemente. Sobald ein Element des Arrays messung verändert wird, wird das passende Element von werte automatisch angepasst. C# - Einführung 26.06.12 Seite 18
Elemente eines Arrays kopieren private static void arraykopieren(int[] werte) { int[] zahlen = new int[20]; werte.copyto(zahlen, 0); Jedes eindimensionale Array hat die Methode CopyTo(). Der Methode werden folgende Parameter übergeben: Wohin sollen die Elemente kopiert werden? Ab welcher Position sollen die Elemente eingefügt werden? Vorhandene Elemente werden überschrieben. Andere Möglichkeit: Copy(). C# - Einführung 26.06.12 Seite 19
Kopie eines Arrays private static void arraykopieren(int[] werte) { int[] messung; messung = werte; messung = (int[])zahlen.clone(); Die Methode.Clone() gibt ein Objekt zurück. Das zurückgegebene Objekt wird in den gewünschten Datentyp konvertiert. Alle Elemente, die einen Basisdatentyp nutzen, werden kopiert. Verweise auf Elemente werden nicht kopiert. C# - Einführung 26.06.12 Seite 20
Mehrdimensionale Arrays... haben mehrere Dimensionen. bilden zum Beispiel Tabellen oder Matrizen ab. (0,0) 1 (0,1) 2 (0,2) 3 (0,3) 4 (1,0) 11 (1,1) 12 (1,2) 13 (1,3) 14 C# - Einführung 26.06.12 Seite 21
definieren int[,] zahl; int[,,] werte = new int[3, 4, 5]; Datentyp[,] variable; Dem Datentyp folgen direkt die eckigen Klammern. In den eckigen Klammern wird für jede Dimension ein Kommata gesetzt. Anschließend folgt der frei wählbare Name des Arrays. Ein Array kann gleichzeitig definiert und erzeugt werden. Alle Dimensionen haben den gleichen Datentyp. C# - Einführung 26.06.12 Seite 22
erzeugen int[,] zahl; int[,,] werte = new int[3, 4, 5]; zahl = new int[2, 4];...= new Datentyp[Anzahl]; Mit Hilfe des Schlüsselwortes new wird ein Array von einem bestimmten Datentyp in einer bestimmten Größe erzeugt. Für jede Dimension muss ein Größenwert angegeben werden. Die verschiedenen Größen für die Dimensionen werden durch Kommata getrennt. C# - Einführung 26.06.12 Seite 23
initialisieren int[,] X_Y_Werte = new int[,]{ {1, 2, 3, 4, 5, {6, 7, 8, 9, 10 ; Die äußeren geschweiften Klammern sammeln alle Dimensionen des Arrays. Die verschiedenen Dimensionen werden durch Kommata getrennt. Jede innere geschweifte Klammer fasst eine Liste von Werten für jede Dimension zusammen. Die Elemente für jede Dimension werden durch Kommata getrennt. C# - Einführung 26.06.12 Seite 24
Elemente eines Arrays int[,] zahl; zahl = new int[2, 4]; zahl[1, 0] = 5; Array[index, index]; Für jede Dimension wird ein Index, getrennt durch ein Kommata angegeben. C# - Einführung 26.06.12 Seite 25
for-schleife nutzen int[,] zahl = new int[2, 4]; for (int zeile = 0; zeile < zahl.getlength(0); zeile++) { for (int spalte = 0; spalte < zahl.getlength(1); spalte++) { zahl[0, 1] = zeile * spalte; Die verschiedenen Dimensionen werden mit Hilfe verschachtelter for-schleifen durchlaufen. Mit Hilfe der Methode.GetLength(dimension) kann die Größe einer Dimension ermittelt werden. C# - Einführung 26.06.12 Seite 26
Enumeration... ist eine Gruppe benannter Konstanten. ist eine Aufzählung von Konstanten zu einem Thema wie zum Beispiel Montag bis Freitag. kann einen bestimmten Status abbilden. bieten die Möglichkeit, Werte einer bestimmten Kategorie (zum Beispiel Fehlercodes) einzuschränken. hat standardmäßig den Datentyp int32, kann aber auch jeden anderen ganzzahligen Datentyp annehmen. C# - Einführung 26.06.12 Seite 27
definieren enum MassEinheit { Hektar, Ar ; enum MassEinheit { Hektar = 10000, Ar = 100 ; Die Aufzählung beginnt mit dem Schlüsselwort enum. Dem Schlüsselwort folgt ein benutzerdefinierter Name. In den geschweiften Klammern werden die Konstanten aufgelistet. Die Konstanten in der Liste werden durch Kommata getrennt. Standardmäßig wird der ersten Konstanten der Wert 0 zugewiesen. Der zweiten Konstanten wird ein Wert plus 1 zugewiesen und so weiter. C# - Einführung 26.06.12 Seite 28
Nummerierung ändern enum MassEinheit { Hektar, Ar ; enum MassEinheit { Hektar = 10000, Ar = 100 ; Mit Hilfe des Gleichheitszeichens kann ein oder mehreren Konstanten ein benutzerdefinierter Wert zugewiesen werden. Falls der nachfolgenden Konstante kein Wert zugewiesen wird, hat diese einen Wert plus 1. Konstanten können auch dieselben Werte besitzen. C# - Einführung 26.06.12 Seite 29
nutzen switch (eingabe){ case (int)masseinheit.hektar: umrechnung = flaeche / ((int)masseinheit.hektar); break; case (int)masseinheit.ar: umrechnung = flaeche / ToAr; break; C# - Einführung 26.06.12 Seite 30
Collections... sind Auflistungen oder Listen. fassen gleiche Objekte zusammen. sind dynamische Datenstrukturen. werden in der Klasse System.Collections definiert. sind zum Beispiel dynamische Array-Listen, Stacks, Queues oder Hash-Tabellen. C# - Einführung 26.06.12 Seite 31
ArrayList... entspricht einem dynamischen Array. ist indexbasiert. besteht aus nicht sortierten Elementen beliebigen Typs. ist nicht typsicher. C# - Einführung 26.06.12 Seite 32
definieren ArrayList artikel = new ArrayList(); In diesem Beispiel wird eine Variable vom Typ ArrayList erstellt. Mit Hilfe des Schlüsselwortes new wird eine neue leere ArrayList erzeugt. C# - Einführung 26.06.12 Seite 33
Elemente hinzufügen artikel.add("kugelschreiber"); artikel.add("bleistift"); Mit Hilfe der Methode.Add() wird ein Element am Ende der Liste angefügt. Das Element kann von einem beliebigen Datentyp sein. C# - Einführung 26.06.12 Seite 34
Elemente löschen artikel.removeat(index); Der Methode.RemoveAt wird ein Index übergeben. Mit Hilfe des Indizes wird das zu löschende Element identifiziert. C# - Einführung 26.06.12 Seite 35
Liste löschen artikel.clear(); Mit Hilfe der Methode.Clear() werden alle Elemente aus der Liste gelöscht. Anschließend ist die Liste leer. C# - Einführung 26.06.12 Seite 36
Index nutzen ArrayList artikel = new ArrayList(); artikel.add("kugelschreiber"); artikel.add("bleistift"); for (int index = artikel.count - 1; index >= 0; index--) { string element; element = artikel[index].tostring(); C# - Einführung 26.06.12 Seite 37
Für jedes Element... ArrayList artikel = new ArrayList(); artikel.add("kugelschreiber"); artikel.add("bleistift"); foreach (Object element in artikel) { Console.WriteLine(element); C# - Einführung 26.06.12 Seite 38
Hashtable... verwaltet Elemente mit Hilfe eines Schlüssels. hat Schlüssel-Werte-Paare als Elemente. Der Schlüssel sowie der Wert kann von einem beliebigen Datentyp sein. Für jeden Schlüssel wird intern ein bestimmter Hashcode vom Datentyp Integer errechnet. C# - Einführung 26.06.12 Seite 39
definieren Hashtable artikel = new Hashtable(); In diesem Beispiel wird eine Variable vom Typ Hashtable erstellt. Mit Hilfe des Schlüsselwortes new wird eine neue leere Hash- Tabelle erzeugt. C# - Einführung 26.06.12 Seite 40
Elemente hinzufügen artikel.add(1, "Kugelschreiber"); artikel.add(2, "Bleistift"); Mit Hilfe der Methode.Add() wird ein Schlüssel-Wert-Paar hinzugefügt. Der Methode wird als Parameter ein Schlüssel und ein Wert übergeben. Die Parameter werden durch Kommata getrennt. C# - Einführung 26.06.12 Seite 41
Ausgabe von Schlüsseln oder Werten Console.WriteLine("\n"); foreach (int index in artikel.keys) { Console.WriteLine(index + " : " + artikel[schluessel]); Console.WriteLine("\n"); foreach (string wert in artikel.values) { Console.WriteLine("Element : " + wert); C# - Einführung 26.06.12 Seite 42
Ausgabe von Schlüssel-Wert-Paaren Console.WriteLine("\n"); foreach (DictionaryEntry element in artikel) { Console.WriteLine(element.Key + " : " + element.value); C# - Einführung 26.06.12 Seite 43
Suche nach Schlüsseln oder Werten if (artikel.containskey(3)) { Console.WriteLine("Key 3 ist vorhanden"); if (artikel.containsvalue("bleistift")) { Console.WriteLine("Der Wert Bleistift ist vorhanden"); C# - Einführung 26.06.12 Seite 44