Liste in C# in Wörterbuch umwandeln

Rana Hasnain Khan 15 Februar 2024
  1. Liste in C# in Wörterbuch umwandeln
  2. Konvertieren Sie die Liste mit der LINQ-Methode ToDictionary() in C# in ein Wörterbuch
  3. Konvertieren Sie die Liste mit der Non-Linq-Methode in C# in ein Wörterbuch
Liste in C# in Wörterbuch umwandeln

In diesem Artikel erfahren wir, wie wir mit ToDictionary() eine Liste in ein Wörterbuch umwandeln können, und wir bekommen auch eine Vorstellung davon, wie wir mit doppelten Schlüsseln umgehen können.

Liste in C# in Wörterbuch umwandeln

Es gibt viele Situationen, in denen wir eine Liste in ein Wörterbuch umwandeln müssen. Es gibt ein paar Methoden, mit deren Hilfe wir eine Liste ganz einfach in ein Wörterbuch umwandeln können.

Wir werden diese Methoden im Detail mit Beispielen weiter unten besprechen.

Konvertieren Sie die Liste mit der LINQ-Methode ToDictionary() in C# in ein Wörterbuch

Der einfachste Weg, eine Liste in ein Wörterbuch umzuwandeln, ist die LINQ-Methode ToDictionary(), die unten gezeigt wird.

Beispielcode:

#Csharp
using System.Linq;

var seasonList = GetSeasonsList();
var seasonsById = seasonList.ToDictionary(keySelector: s => S.Id, elementSelector: s => s);

Dies funktioniert durch Schleifen innerhalb der Liste und verwendet die Schlüssel-/Elementauswahl-Lambdas, die wir zur Bildung des Wörterbuchs festgelegt haben.

Hier werden die Parameter keySelector und elementSelector auf diese Weise erwähnt, um sie leicht lesen zu können.

Konvertieren Sie die Liste mit der Non-Linq-Methode in C# in ein Wörterbuch

Wir können eine Liste auch auf Nicht-LINQ-Weise mithilfe einer Schleife in ein Wörterbuch konvertieren.

Beispielcode:

#Csharp
var seasons = GetSeasonList();
var seasonById = new Dictionary<int, Season>();

foreach (var season in seasons) {
  seasonById.Add(season.Id, season);
}

Es wird empfohlen, die Nicht-LINQ-Methode zu verwenden, da sie eine verbesserte Leistung bietet, aber wir können beide Methoden gemäß unseren Vorlieben verwenden.

Bei diesen Verfahren können zwei Arten von Elementselektoren verwendet werden. Einer ist ein impliziter Elementselektor und der andere ein expliziter Elementselektor.

Wenn wir diese beiden Anweisungen verwenden, ist das Ergebnis dasselbe. Verwenden wir einen impliziten Elementselektor, wie unten gezeigt.

Beispielcode:

#Csharp
var seasonsById = seasonList.ToDictionary(keySelector: s => s.Id, elementSelector: s => s);

Verwenden wir einen expliziten Elementselektor, wie unten gezeigt.

Beispielcode:

#Csharp
var seasonById = seasonList.ToDictionary(keySelector: s => s.Id);

Die Elementauswahl verwendet automatisch die Elemente in der Liste als Elemente, wenn Sie sie nicht definiert haben. Dies ist möglicherweise das, was Sie sich wünschen, wenn Sie Objekte anhand einer ihrer Eigenschaften markieren.

Doppelte Schlüssel in C#

Die Liste kann einen doppelten Schlüssel haben. In diesem Szenario zeigt ToDictionary() eine Ausnahme namens System.ArgumentException an.

Es zeigt, dass ein Element mit demselben Schlüssel bereits auf der Liste ist, wenn wir versuchen, mit Hilfe des unten gezeigten Codes einen doppelten Schlüssel hinzuzufügen.

Syntax:

#Csharp
Dictionary.Add(key, value)

Wir erhalten die gleiche Ausnahme mit dem oben gezeigten Code. Dies ist die gleiche Ausnahme, die wir erhalten, wenn wir versuchen, einen doppelten Schlüssel mit Dictionary.Add(key, value) einzufügen.

Ausnahmsweise können wir doppelte Schlüssel in unseren Daten vermeiden.

Wenn wir doppelte Schlüssel in unseren Daten haben möchten, müssen wir sie nach dem Schlüssel gruppieren und auswählen, was wir für den Wert wollen. Sehen wir uns einige Optionen an, wie unten erläutert.

ein aggregierter Wert für den Schlüssel in C#

Zunächst werden wir die Anzahl der Artikel schätzen. Wir können Wörter wiederholen.

Um dies zu erreichen, müssen wir nach dem Wort gruppieren und die Anzahl als Aggregat festlegen.

Lassen Sie uns ein Beispiel durchgehen, in dem wir dies verwenden, um nach doppelten Schlüsseln zu suchen, wie unten gezeigt.

Beispielcode:

#Csharp
var seasons = new List<string> { "You", "Breaking Bad", "Marvel", "You" };

var seasonCountMap =
    seasons.GroupBy(s => s).ToDictionary(keySelector: m => m.Key, elementSelector: m => m.Count());

foreach (var seasonCount in seasonCountMap) {
  Console.WriteLine($"{seasonCount.Key}={seasonCount.Value}");
}

Ausgang:

doppelte Schlüssel in C

Liste der Elemente für den Schlüssel in C#

Hier werden wir einige Saisons nach ihrem Erscheinungsjahr katalogisieren. Jedes Jahr können viele Staffeln veröffentlicht werden.

Um ein Wörterbuch von Listen zu erhalten, können wir den folgenden Code verwenden, wie unten gezeigt.

Beispielcode:

#Csharp
var seasonList = GetSeasonList();
var seasonByYear = seasonList.GroupBy(s => s.YearOfRelease)
                       .ToDictionary(keySelector: m => m.Key, elementSelector: m => m.ToList());

foreach (var seasonGroup in seasonByYear) {
  Console.WriteLine(
      $"{seasonGroup.Key}={string.Join(", ", seasonGroup.Value.Select(v => v.Name))}");
}

Erstes Element mit dem Schlüssel in C#

Wir müssen eines der Elemente auswählen, um die Gruppe im Falle von doppelten Schlüsseln zu beschreiben. Wir können das erste Element in der Gruppe als Stellvertreter wählen.

Sehen wir uns ein Beispiel an. Wie unten gezeigt, haben wir Saisons nach Jahr aufgelistet und nur eine Saison pro Jahr ausgewählt.

Beispielcode:

#Csharp
var seasonList = GetSeasonList();

var seasonsByYear = seasonList.GroupBy(s => s.YearOfRelease)
                        .ToDictionary(keySelector: m => m.Key, elementSelector: m => m.First());

Foreach(var season in seasonsByYear) {
  Console.WriteLine($"{season.Key}={season.Value.Name}");
}

Duplikate prüfen durch Schleifen in C#

Sie müssen prüfen, ob der Schlüssel vorhanden ist, wenn Sie die Schleifenmethode anstelle der LINQ-Methode verwenden. Auf diese Weise werden Sie leicht mit Duplikaten fertig.

Und Sie können völlig frei entscheiden, wie Sie mit Duplikaten umgehen möchten.

Beispielcode:

#Csharp
using System.IO;
using System;

class Program {
  static void Main() {
    var seasons = GetSeasonList();
    var seasonsByYear = new Dictionary<int, List<Season>>();
    foreach (var season in seasons) {
      if (!seasonByYear.ContainsKey(season.YearOfRelease)) {
        seasonByYear.Add(season.YearOfRelease, new List<Season>());
      }
      seasonByYear[season.YearOfRelease].Add(season);
    }
    foreach (var seasonGroup in seasonByYear) {
      Console.WriteLine(
          $"{seasonGroup.Key}={string.Join(", ", seasonGroup.Value.Select(m =>m.Name))}");
    }
  }
}

In diesem Beispiel wurde eine Liste mit Jahreszeiten erstellt, die jedes Jahr veröffentlicht werden. Wenn die Funktion feststellt, dass der Schlüssel noch nicht angegeben ist, präsentiert sie ihn mit einer leeren Liste und fügt ihr dann eine Jahreszeit hinzu.

Rana Hasnain Khan avatar Rana Hasnain Khan avatar

Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.

LinkedIn

Verwandter Artikel - Csharp Dictionary

Verwandter Artikel - Csharp List