Zum Fußzeileninhalt springen
Iron Academy Logo
Lernen Sie C#
Lernen Sie C#

Andere Kategorien

C# verstehen Liste

Layla Porter
14m 6s

Die Klasse List in C#, die ein vielseitiger Auflistungstyp ist. Es basiert auf einem dynamischen Array als interne Datenstruktur, was eine effiziente Manipulation der Elemente ermöglicht. Wenn Sie eine Liste erstellen, können Sie eine anfängliche Standardkapazität angeben, um die Speichernutzung von Anfang an zu optimieren. Diese Kapazität ist die Anzahl der Elemente, die die Liste zunächst aufnehmen kann, ohne dass Speicher neu zugewiesen wird.

In Layla Porters Video "C# für Anfänger Teil 7 - Abfrage von Daten mit LINQ" taucht sie tief in die Funktionalität von C#-Listen ein und zeigt, wie man LINQ (Language Integrated Query) zur effizienten Abfrage von Daten nutzen kann. In diesem Artikel werden die wichtigsten Konzepte und Beispiele aus dem Video von Layla aufgeschlüsselt, um Anfängern ein umfassendes Verständnis von C#-Listen zu vermitteln.

Einführung in C#-Listen

Wie Layla zu Beginn ihres Videos (0:03) erwähnt, ist eine C#-Liste eine vielseitige Datenstruktur, die es Entwicklern ermöglicht, eine Sammlung von Elementen zu speichern und zu manipulieren. Im Gegensatz zu Arrays können Listen ihre Größe dynamisch ändern, was sie ideal für Szenarien macht, in denen die Anzahl der Elemente nicht im Voraus bekannt ist.

Die Verwendung einer Liste ist ganz einfach. Sie können Elemente mit der Add-Methode hinzufügen, die das angegebene Objekt an das Ende der Liste anhängt. Die Liste verwendet einen nullbasierten Index, d. h. der Zugriff auf das erste Element erfolgt bei Index 0. Sie können auch auf Elemente mit einem bestimmten Index zugreifen, indem Sie die Notation in eckigen Klammern ([]) verwenden.

Für die Iteration durch die Liste können Sie eine foreach-Schleife verwenden, die die einzelnen Elemente in der Reihenfolge ihres Auftretens durchläuft. Wenn Sie das erste Vorkommen eines bestimmten Elements finden müssen, können Sie Methoden wie IndexOf mit einem Prädikat verwenden, das auf der Grundlage einer bestimmten Bedingung sucht.

List ist stark typisiert, d. h. es enthält Objekte eines bestimmten Typs (T). Dies gewährleistet Typsicherheit und ermöglicht die Verwendung von Methoden und Eigenschaften, die durch den angegebenen Objekttyp definiert sind. Standardmäßig verwendet List eine Standard-Hash-Funktion, um Elemente effizient zu organisieren.

Werfen wir einen Blick auf die Funktionsweise der Methoden der Klassen List und List, wie sie von Layla in ihrem Video demonstriert werden.

Eine Liste erstellen

Beim Erstellen einer Liste in C# können Sie eine bestimmte Anfangskapazität festlegen, um die interne Datenstruktur zu optimieren. Listen sind vielseitig und können aus einer bestimmten Sammlung von Elementen initialisiert werden. Sie können mit einem int-Index auf Elemente zugreifen und sie mit einer foreach-Schleife durchlaufen. Im Gegensatz zu Wörterbüchern verlassen sich Listen nicht auf eine Standard-Hash-Funktion und speichern stark typisierte Objekte, die Typsicherheit und Konsistenz in Ihrer Datenverwaltung gewährleisten.

Bei (0:44) erstellt Layla eine Liste von Käsesorten und zeigt, wie man eine Liste initialisiert und auffüllt. In C# kann eine Liste mithilfe der Klasse List erstellt werden, wobei T für den Typ der in der Liste enthaltenen Elemente steht.

List<Cheese> cheeseList = new List<Cheese>
{
    new Cheese(1, "Stilton", 3.0m, 5),
    new Cheese(2, "Cheddar", 2.25m, 3),
    new Cheese(3, "Pineapple", 3.5m, 1),
    new Cheese(4, "Brie", 5.5m, 2),
    new Cheese(5, "Roquefort", 3.5m, 5),
};
List<Cheese> cheeseList = new List<Cheese>
{
    new Cheese(1, "Stilton", 3.0m, 5),
    new Cheese(2, "Cheddar", 2.25m, 3),
    new Cheese(3, "Pineapple", 3.5m, 1),
    new Cheese(4, "Brie", 5.5m, 2),
    new Cheese(5, "Roquefort", 3.5m, 5),
};

Im obigen Beispiel erstellt Layla ein List<Cheese> unter Verwendung der Collection-Initializer-Syntax, um die Liste mit Cheese Objekten zu definieren und zu füllen. Sie gibt Eigenschaften wie ID, Name, Preis und Stärke für jedes Käseobjekt an, das der Klasse Cheese entspricht, und demonstriert die Erstellung und Initialisierung einer Liste in C#.

Iterieren durch die Käseliste, um ID und Name zu drucken

Layla Porter demonstriert, wie man eine foreach-Schleife verwendet, um über den cheeseList zu iterieren und nur die ID und den Namen jedes Käses auszugeben. Im Folgenden finden Sie den Code zusammen mit einer Erläuterung:

foreach (var cheese in cheeseList)
{
    Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}
foreach (var cheese in cheeseList)
{
    Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}

Im obigen Code verwendet Layla eine foreach-Schleife, um den cheeseList zu durchlaufen. Dies gibt alle Elemente der Liste aus. Die Schleife iteriert durch jedes Cheese-Objekt in der Liste. Bei jeder Iteration hält die Variable cheese das aktuelle Cheese-Objekt an dem angegebenen Index. Mit Console.WriteLine gibt sie die ID- und Name-Eigenschaften jedes Käses aus und zeigt, wie man auf spezifische Elemente einer Liste in C# zugreift und diese anzeigt.

Suchen nach Käse mit LINQ Query

Im Video bei 2:45 demonstriert Layla Porter, wie man mit Hilfe von LINQ nach einem bestimmten Käse auf der Grundlage von Benutzereingaben sucht. Sie verwendet die ReadLine Methode, um den Käsename vom Benutzer zu erhalten:

string cheeseName = Console.ReadLine();
string cheeseName = Console.ReadLine();

Bei der Suche nach einem Eintrag in der Liste hebt Layla bei 2:51 einen sehr wichtigen Schlüsselpunkt hervor. Sie sagt, wenn wir LINQ nicht verwenden würden, müssten wir manuell eine Schleife über jeden Käse in unserer Sammlung ziehen, um einen Namen zu finden, der mit der Benutzereingabe übereinstimmt, aber die LINQ-Hilfsbibliotheken erledigen dies im Hintergrund und machen den Prozess sehr effizient. Der folgende Codeschnipsel zeigt, wie Layla (3:40) durch die Listenelemente iteriert, ohne eine for-Schleife zu verwenden, indem es einfach die LINQ-Abfragesyntax verwendet:

if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
    Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);

    Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
    Console.WriteLine("I'm sorry, we don't have that cheese.");
}
if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
    Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);

    Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
    Console.WriteLine("I'm sorry, we don't have that cheese.");
}

Im obigen Code:

  • Layla erklärt, dass wir für eine effizientere Suche LINQ verwenden können, anstatt manuell durch die Liste zu gehen. Die Any Methode überprüft, ob ein Käse in der Liste dem vom Benutzer eingegebenen Namen entspricht.

  • Wenn eine Übereinstimmung gefunden wird, bedeutet dies, das Element existiert, die FirstOrDefault Methode ruft den ersten Käs, der dem eingegebenen Namen entspricht, ab. Diese Methode ist sicher, da sie null zurückgibt, wenn keine Übereinstimmung gefunden wird, und somit mögliche Fehler verhindert.

  • Wenn der Käse gefunden wird, werden sein Name, sein Preis und seine Stärke gedruckt. Ist dies nicht der Fall, wird eine Meldung angezeigt, die besagt, dass der Käse nicht gefunden wurde.

Dieser Ansatz veranschaulicht die Effizienz und Einfachheit der Verwendung von LINQ für die Suche in Sammlungen in C#. Die Ausgabe des Codeschnipsels ist bei 7:19 zu sehen: (Besseres Bild möglich als unten?)

Beispielausgabe

Behandlung der Groß- und Kleinschreibung bei der Suche

Wenn man mit Strings arbeitet, erinnert Layla um 8:00 daran, dass es wichtig ist, sich daran zu erinnern, dass sie case-sensitive sind. Um sicherzustellen, dass unsere Käsenamevergleiche case-insensitive sind, müssen wir sowohl die Benutzereingabe als auch die Käsennamen in unserer Liste mit der .ToLower() Methode in Kleinbuchstaben umwandeln. So kann der Benutzer jede beliebige Großschreibung eingeben, und unser Code findet trotzdem den passenden Käse. Denken Sie daran, dass die Groß- und Kleinschreibung von Zeichenketten lästig sein kann, daher ist der richtige Umgang mit ihr entscheidend.

Praktisches Beispiel: Abfrage von Käsesorten nach Stärke

Bei (8:50) erstellt Layla ein praktisches Beispiel, bei dem der Benutzer Käsesorten nach ihrer Stärke filtern kann, und demonstriert, wie Benutzereingaben mit LINQ-Abfragen kombiniert werden können.

1. Aufforderung zur Benutzereingabe und Lesen

Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();
Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();

Layla um 9:05 beginnt damit, den Benutzer zu bitten, einen Stärke-Wert zwischen 1 und 5 zu wählen. Das geschieht mit einer einfachen Console.WriteLine, die nach Eingaben fragt, gefolgt von Console.ReadLine(), um zu erfassen, was sie eingeben.

2. Eingabe in Ganzzahl umwandeln

bool isInt = int.TryParse(strengthString, out int strength);
bool isInt = int.TryParse(strengthString, out int strength);

Als Nächstes, bei 9:16, stellt sie sicher, dass die Eingabe eine tatsächliche Zahl ist. Sie empfiehlt, dafür int.TryParse zu verwenden. Wenn die Eingabe überprüft und erfolgreich in eine ganze Zahl umgewandelt wird, ist das großartig! Wenn nicht, können wir das natürlich auch erledigen.

3 Käsesorten nach Stärke filtern

List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();
List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();

Jetzt kommt der spaßige Teil in Laylas Video um 10:25. Hier zeigt sie, wie man unsere Liste der Käses, d. h. cheeseList, mit LINQ filtert. Mit der Where Methode von LINQ und einem schnellen Lambda-Ausdruck (c => c.Strength == strength) zieht sie nur die Käses heraus, die der Benutzer gewählte Stärke entsprechen. Dies gibt uns eine neue Liste, cheeseByStrength.

4. gefilterte Käsesorten ausgeben

foreach (var cheese in cheeseByStrength)
{
    Console.WriteLine($"Name: {cheese.Name} cheese");
}
foreach (var cheese in cheeseByStrength)
{
    Console.WriteLine($"Name: {cheese.Name} cheese");
}

Zuletzt um 12:03, um alles schön abzurunden, durchläuft Layla die cheeseByStrength mit einer foreach-Schleife. Für jeden Käse in dieser Liste gibt sie seinen Namen aus, unter Verwendung des angegebenen Prädikats in Console.WriteLine. Einfach und effektiv!

Bei der Ausführung des Programms bei 12:17 demonstriert Layla, wie der Benutzer einen Wert für die Stärke eingibt und die Liste gefiltert wird, um nur Käse mit der angegebenen Stärke anzuzeigen. Die Beispielausgabe ist unten abgebildet: (Besseres Bild möglich?)

Beispielausgabe

Abschluss

Laylas Video führt effektiv in das Konzept von C#-Listen ein und zeigt, wie man sie mit LINQ abfragt. Anhand ihrer Beispiele und Erklärungen können Anfänger eine solide Grundlage für die Arbeit mit Listen und die Abfrage von Daten in C# erwerben. Weitere Informationen und Live-Coding-Sitzungen finden Sie auf Laylas YouTube-Kanal Kanal und in ihren Live-Streams.

Denken Sie daran, die verschiedenen Methoden und Eigenschaften der List-Klasse zu erkunden, wie die Count Eigenschaft, Insert Methode, Prädikatfunktionen und mehr, um Ihr Verständnis und Ihre Fähigkeit, Listen effektiv zu manipulieren, zu verbessern.

Hero Worlddot related to C# verstehen Liste
Hero Affiliate related to C# verstehen Liste

Verdienen Sie mehr, indem Sie teilen, was Sie lieben

Erstellen Sie Inhalte für Entwickler, die mit .NET, C#, Java, Python oder Node.js arbeiten? Verwandeln Sie Ihr Fachwissen in ein zusätzliches Einkommen!

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an