C++ - Einführung in die Programmierung · C# - Einführung | 26.06.12 Seite 2 Arrays ... speichern...
Transcript of C++ - Einführung in die Programmierung · C# - Einführung | 26.06.12 Seite 2 Arrays ... speichern...
Leibniz Universität IT Services | Anja Aue
C# - Einführung in die Programmiersprache
„Arrays, Enumeration und Collections“
C# - Einführung | 26.06.12 Seite 2
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 3
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 4
… 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 5
… 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 6
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 7
… 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 8
… 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 9
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 10
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 11
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 12
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 13
… 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 14
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 15
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 16
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 17
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 18
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 19
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 20
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 21
(1,0)11
(1,1)12
(1,2)13
(1,3)14
Mehrdimensionale Arrays ...
haben mehrere Dimensionen.
bilden zum Beispiel Tabellen oder Matrizen ab.
(0,0)1
(0,1)2
(0,2)3
(0,3)4
C# - Einführung | 26.06.12 Seite 22
… 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 23
… 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 24
… 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 25
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 26
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 27
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 28
… 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 29
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 30
… 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 31
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 32
ArrayList ...
entspricht einem dynamischen Array.
ist indexbasiert. besteht aus nicht sortierten Elementen beliebigen Typs. ist nicht typsicher.
C# - Einführung | 26.06.12 Seite 33
… 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 34
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 35
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 36
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 37
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 38
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 39
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 40
… 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 41
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 42
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 43
Ausgabe von Schlüssel-Wert-Paaren
Console.WriteLine("\n");
foreach (DictionaryEntry element in artikel)
{
Console.WriteLine(element.Key + " : " + element.Value);
}