44
Leibniz Universität IT Services | Anja Aue C# - Einführung in die Programmiersprache „Arrays, Enumeration und Collections“

C++ - Einführung in die Programmierung · C# - Einführung | 26.06.12 Seite 2 Arrays ... speichern mehrere Werte vom gleichen Datentyp. fassen zusammenhängende Werte wie zum Beispiel

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

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);

}

C# - Einführung | 26.06.12 Seite 44

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");

}