Was Arrays sind und wofür sie benutzt werden
Dieser Artikel wird die einzige Ressource sein, die du jemals brauchen wirst um C# Arrays zu verstehen. Lies dir den Artikel also auf jeden Fall bis ganz zum Schluss durch.
Das solltest du schon wissen
Um C# Arrays komplett verstehen zu können ist es unbedingt notwendig, dass du schon weißt was Variablen und Datentypen sind. Falls du darüber also noch keine Kenntnisse haben solltest, lies dir die passenden Lektionen dazu jetzt am besten durch.
Kurzgesagt: Mit Arrays kannst du mehrere Variablen eines Datentypen speichern (stell dir das am besten wie eine Liste vor).
C# Array praktisch erklärt
Nehmen wir als Beispiel eine Schulklasse mit sechs Kindern:
Wir könnten jetzt für jedes der Kinder eine string
Variable anlegen die den Namen des Kindes wiedergibt.
Wichtig: Der folgende Code ist ein Negativ-Beispiel und soll nur veranschaulichen wieso Arrays so wichtig sind!
static void Main(string[] args)
{
string student1 = "Peter";
string student2 = "Karl";
string student3 = "Heinrich";
string student4 = "Lisa";
string student5 = "Max";
string student6 = "Sophie";
// Denkaufgabe: Wie würde der Code hier wohl mit 1.000 Schülern aussehen?
}
Der oben stehen Code mit den sechs einzelnen Variablen ist aus mehrere Gründen unglaublich schlecht und zeigt die Notwendigkeit von Arrays. So wie der Code derzeit aussieht gibt es beispielweise keine professionelle Möglichkeit um die Namen aller Schüler in die Konsole auszugeben. Weiter unten im Artikel kommen wir darauf erneut zurück.
Die Lösung? Ein C# Array muss her!
Stell dir den C# Array am besten wie eine Art Liste vor (es gibt tatsächlich auch Objekte in C# die List heißen, aber dazu später mehr).
Jeder Schüler bekommt einen fest zugewiesen Platz im Array. Die Länge des Arrays ist im unseren Fall sechs (weil wir sechs Schüler haben).
Wichtig: Der Computer beginnt bei 0 zu zählen! Daher befindet sich der erste Schüler auf der Array Position (Index) 0 und nicht 1.
Lass uns jetzt einen echten Array erstellen, damit wir die sechs einzelnen Variablen loswerden! Als Datentyp für den Array verwenden wir auch hier wieder string
:
static void Main(string[] args)
{
string[] students = new string[] { "Peter", "Karl" , "Heinrich", "Lisa", "Max", "Sophie"};
}
Schauen wir uns das Beispiel einmal genauer an. Mit den eckigen Klammern []
legen wir fest, dass sich die Variable als Array verhalten soll, mit string[] students
haben wir also einen Array vom Datentyp string
deklariert.
Mit dem new
Operator erstellen wir ein neues Objekt vom Typ string
Array. Denke immer daran, dass C# eine objektorientierte Sprache ist.
Hinter den zweiten eckigen Klammern sehen wir dann die sechs Elemente (in diesem Fall sind es Schüler) in den geschweiften Klammern. Jedes Element wird mit einem Komma voneinander getrennt.
Wie auch schon oben im Bild veranschaulicht, sieht unserer Array vom Inhalt jetzt also folgendermaßen aus:
- auf Platz 0 → Peter
- auf Platz 1 → Karl
- auf Platz 2 → Heinrich
- auf Platz 3 → Lisa
- auf Platz 4 → Max
- auf Platz 5 → Sophie
Wie bereits erwähnt fangen wir bei 0 an zu zählen anstatt bei eins. Das machen Computer nun mal so. Wenn wir also wissen möchten wer im Array an erster Stelle steht, dann müssen wir das Element im Array mit dem Index 0 abfragen. Beachte auch, dass der letzte Platz dann natürlich nicht auf 6 ist sondern auf Index 5.
Ein Element im Array abfragen
Wenn du jetzt ein Element aus dem Array oben abfragen möchtest, dann benötigst du einen Index. Der Index gibt einfach nur an, an von welchem Element im Array du den Wert bekommen möchtest (1. Element im Array → Index 0).
static void Main(string[] args)
{
string[] students = new string[]{ "Peter", "Karl" , "Heinrich", "Lisa", "Max", "Sophie"};
string studentName = students[2]; // <- Index ist 2
Console.WriteLine(students); // Ergebnis ist Heinrich (3. Element im Array)
Console.ReadKey();
}
Mit den eckigen Klammern im Beispiel fragen wir mit dem Index 2 das 3. Element (0,1,2) im Array ab, als Ergebnis bekommen wir “Heinrich”. Was korrekt ist.
Ein Element im Array verändern (neuen Wert zuweisen)
Wir können auch den Wert von einem Element im Array verändern. Dafür nutzen wir auch hier wieder die eckigen Klammern. Das tut man einfach immer wenn man ein Element im Array verändern oder abfragen möchte.
static void Main(string[] args)
{
string[] students = new string[]{ "Peter", "Karl" , "Heinrich", "Lisa", "Max", "Sophie"};
students[0] = "Rüdiger";
Console.WriteLine(students[0]); // Ergebnis ist Rüdiger
Console.ReadKey();
}
Der Wert von dem ersten Element im Array ist nicht länger “Peter”, denn er wurde durch “Rüdiger” ersetzt.
Wichtiger Hinweis: Ein Array kann nicht vergrößert oder verkleinert werden nachdem er erstellt wurde. Das heißt, in den Beispielen von oben könnten wir die Länge des Arrays nicht auf vier oder zehn verändern. Als Lösung dafür gibt es in C# bestimmte Klassen die auf Arrays aufbauen und sie ergänzen. Ein häufig verwendeter Typ ist die C# List oder das C# Dictionary.
Die häufige IndexOutOfRangeException
Wie du mit Sicherheit schon erkannt hast ist das mit dem Index etwas verwirrend. Was sehr häufig passiert ist, dass du beispielsweise einen Array mit 10 Werten hast, dein Array hat also eine tatsächliche Länge von 10. Du benutzt einen Index von 10 um das 10. Element im Array abzufragen und bekommst einen Error, die IndexOutOfRangeException.
Das Problem ist, dass du versuchst ein Element auf einem Platz abzufragen das nicht existiert. Wenn dein Array eine länge von 10 hat, dann ist dein größter möglicher Index 9 (0,1,2,3,4,5,6,7,8,9), vergiss niemals dass das erste Element im Array immer auf dem 0. Index sitzt.
Einen Array ohne vordefinierte Werte
Ich habe ja schon erwähnt, dass die Länge eines Arrays nach seiner Erstellung nicht verändert werden kann. Nehmen wir jetzt mal an wir wissen dass die Schulklasse aus 5 Kindern besteht, deren Namen kennen wir aber nicht. Dann können wir den Array nicht mit 5 zugewiesenen Werten deklarieren.
In diesem Fall erstellen wir einfach einen Array mit einer Länge von 5 aber ohne zugewiesene Werte. Die Werte für die Elemente können wir im nachhinein hinzufügen:
static void Main(string[] args)
{
string[] students = new string[5];
students[0] = "Peter";
students[1] = "Karl";
students[2] = "Heinrich";
students[3] = "Gustav";
students[4] = "Lisa";
Console.ReadKey();
}
Wir haben also einen “leeren” Array mit 5 “leeren” Plätzen erstellt und die Plätze im nachhinein gefüllt. Beachte das wir bei der Erstellung des Arrays die Länge des Arrays in die eckigen Klammern geschrieben haben.
Die Anzahl der Elemente eines Arrays abfragen
Sehr häufig kommt es vor, dass du wissen willst, wie viele Elemente in deinem Array existieren. Hierbei spricht man von der sogenannten “Länge” des Arrays (eng. Length).
Jedes Array Objekt besitzt eine Eigenschaft (eng. Property) die wir ganz einfach abfragen können um die Anzahl der Elemente des C# Arrays zu erhalten:
static void Main(string[] args)
{
string[] students = new string[2];
students[0] = "Peter";
students[1] = "Karl";
// Hier verwenden wir die "Length" Eigenschaft
int countOfElements = students.Length;
Console.WriteLine("Der Array hat " + countOfElements + " Elemente.");
// Ausgabe -> 2
Console.ReadKey();
}
Hinweis: Bedenke immer dass das erste Element im Array auf Index 0 sitzt. Wenn die Länge eines Arrays also 10 ist (10 Elemente), dann sitzt das 10. Elemente auf dem 9. Index.
Alle Elemente im Array mit einer Schleife ausgeben
In der Regel speichert man Elemente in einem Array, damit man die Daten sofort oder zu einem späteren Zeitpunkt verwenden kann. Nehmen wir für unser nächstes Beispiel mal an, dass wir die Namen aller Schüler in die Konsole schreiben möchten.
Mit einer Schleife (hier verwenden wir jetzt eine foreach Schleife aber es gibt noch andere) können wir jetzt durch unseren C# Array iterieren (jedes Elemente lesen):
static void Main(string[] args)
{
string[] students = new string[5];
students[0] = "Peter";
students[1] = "Karl";
students[2] = "Heinrich";
students[3] = "Gustav";
students[4] = "Lisa";
// Mit dieser Schleife schreiben wir jeden Schüler
// in die Konsole
foreach(string student in students){
Console.WriteLine(student);
}
Console.ReadKey();
}
Kurzgesagt: Mit Schleifen kannst du durch Datensätze wie Arrays, Listen, Dictionaries uvm. iterieren (auslesen der Elemente)
Schleifen sind ein ganz eigenes Thema. Wenn du noch gar keine Ahnung von Schleifen (eng. Loops) in C# hast, dann lies dir am besten meinen C# foreach Schleifen Artikel durch.
Was man sonst noch mit Arrays anstellen kann
Mit Arrays lassen sich nicht nur stupide Datensammlungen abbilden sondern man kann auch noch einige andere Sachen mit ihnen anstellen. Hier eine kurze Übersicht über weitere Funktionalitäten bezüglich C# Arrays:
- Elemente im Array sortieren oder filtern
- Elemente im Array filtern
- Arrays in Arrays verschachteln (Mehrdimensionale Arrays)
Man kann natürlich noch viele weitere Sachen mit C# Arrays anstellen aber jetzt hast du schonmal eine Vorstellung davon, wofür du Arrays zukünftig verwenden kannst.
Interessante Erweiterungen und Alternativen
C#-Arrays bieten viele Möglichkeiten, um Daten zu speichern und zu verwalten, darunter auch Jagged Arrays. Jagged Arrays ermöglichen es, dass jedes Element des Arrays wiederum ein eigenes Array sein kann.
Aber nicht nur Arrays sind nützlich. Es gibt auch Listen, HashSets und Dictionaries, die alternative Möglichkeiten zum Speichern und Verwalten von Daten bieten. Listen ermöglichen es, Elemente dynamisch hinzuzufügen und zu entfernen, während HashSets und Dictionaries schnelle Suche- und Abrufoperationen ermöglichen, indem sie Elemente in einer optimierten Art und Weise speichern.
Letztendlich hängt es von deinen spezifischen Anforderungen und Anwendungsfällen ab, welche Datenstruktur am besten geeignet ist. Aber wenn du nach einer leistungsstarken und flexiblen Möglichkeit suchst, um Daten in C# zu verwalten, solltest du auf jeden Fall die verschiedenen Optionen wie Jagged Arrays, Mehrdimensionale Arrays, Listen, HashSets und Dictionaries in Betracht ziehen!
Expertenwissen
Nur für Experten: Um mit absoluten Fachwissen zu glänzen kannst du dir jetzt schonmal merken, dass die reine Array Klasse, mehrere Daten speichern kann und das man eine foreach
Schleife benutzten kann, WEIL der Array zwei wichtige Interfaces implementiert: Das IList
Interface und das IEnumerable
Interface.
Das IList
Interface sorgt dafür, dass du Elemente in einem Array speichern kannst und sie über einen Index abfragen kannst. Und das IEnumerable
Interface sorgt dafür, dass du mit einer foreach Schleife durch den Array iterieren kannst.
Fazit
Ein C# Array ist ein wichtiges Element beim programmieren und du solltest auf jeden Fall verstehen wie ein Array funktioniert und wofür er genutzt wird. Wenn du mehr über Arrays erfahren willst, dann schau doch mal hier vorbei.
Bist du bereit jetzt dein C# Array wissen zu testen? Sehr gut! Viel Spaß 🙂
Teste dein C# Array Wissen
You have utilized all of your attempts to pass this quiz.