Heim > Backend-Entwicklung > C++ > Wie kann ich doppelte Schlüssel in .NET-Wörterbüchern verwalten?

Wie kann ich doppelte Schlüssel in .NET-Wörterbüchern verwalten?

Patricia Arquette
Freigeben: 2024-12-30 18:21:09
Original
475 Leute haben es durchsucht

How Can I Manage Duplicate Keys in .NET Dictionaries?

Doppelte Schlüssel in .NET-Wörterbüchern verwalten

Die Verwaltung doppelter Schlüssel in Wörterbüchern ist in vielen Programmierszenarien eine häufige Herausforderung. In der .NET-Basisklassenbibliothek erzwingen Wörterbücher normalerweise eine Eindeutigkeitsbeschränkung für Schlüssel und verhindern so die Speicherung mehrerer Werte, die demselben Schlüssel zugeordnet sind. Es gibt jedoch Möglichkeiten, diese Einschränkung zu überwinden und in einigen Fällen doppelte Schlüssel zu berücksichtigen.

Verwenden einer benutzerdefinierten Klasse

Ein Ansatz besteht darin, eine benutzerdefinierte Wörterbuchklasse zu erstellen, die dies ermöglicht Doppelschlüssel. Wie in der Frage erwähnt, kann eine Klasse wie Dictionary> kann verwendet werden, um mehrere Werte für einen bestimmten Schlüssel zu speichern. Das Arbeiten mit einer solchen Datenstruktur kann jedoch umständlich sein.

Suchklasse in .NET 3.5 und höher

Wenn Sie .NET 3.5 oder höher verwenden, ist die Die Lookup-Klasse bietet eine elegantere Lösung. Die Lookup-Klasse ist ein generischer Typ, der eine Sammlung von Schlüsseln und den entsprechenden Werten erstellt. Wichtig ist, dass es doppelte Schlüssel zulässt und die mit demselben Schlüssel verknüpften Werte gruppiert.

Sie können eine Lookup-Instanz mit der Erweiterungsmethode Enumerable.ToLookup erstellen. Diese Methode nimmt eine Folge von Schlüssel-Wert-Paaren und gibt einen Lookup mit den Schlüsseln als Primärschlüssel und den in ihren jeweiligen Sammlungen gespeicherten Werten zurück.

var lookup = sequence.ToLookup(keySelector, valueSelector);
Nach dem Login kopieren

Der folgende Code erstellt beispielsweise einen Lookup aus a Wörterbuch, in dem die Schlüssel Zeichenfolgen und die Werte Listen von Ganzzahlen sind:

var dictionary = new Dictionary<string, List<int>> { { "key1", new List<int> { 1, 2 } }, { "key2", new List<int> { 3, 4 } } };
var lookup = dictionary.ToLookup(x => x.Key, x => x.Value);
Nach dem Login kopieren

Sobald Sie eine Lookup-Instanz haben, können Sie mit dem []-Operator auf die mit einem Schlüssel verknüpften Werte zugreifen oder die GetValues-Methode. Der []-Operator gibt eine Liste von Werten zurück, während GetValues ​​ein IEnumerable zurückgibt. für eine bessere Leistung beim Durchlaufen einer großen Anzahl von Werten.

Einschränkungen der Lookup-Klasse

Es ist wichtig zu beachten, dass die Lookup-Klasse unveränderlich ist. Nach der Erstellung können Sie keine Schlüssel oder Werte mehr hinzufügen oder entfernen. Sie können jedoch eine neue Lookup-Instanz mit den gewünschten Änderungen erstellen. Darüber hinaus unterstützt die Lookup-Klasse keine gleichzeitigen Änderungen. Wenn Sie gleichzeitigen Zugriff benötigen, sollten Sie die Verwendung eines ConcurrentDictionary in Betracht ziehen.

Fazit

Während die .NET-Basisklassenbibliothek keinen integrierten Wörterbuchtyp bereitstellt, der Duplikate explizit unterstützt Schlüssel bietet die Lookup-Klasse in .NET 3.5 und höher eine praktische und effiziente Lösung zum Gruppieren und Abrufen von Werten, die mit doppelten Schlüsseln verknüpft sind.

Das obige ist der detaillierte Inhalt vonWie kann ich doppelte Schlüssel in .NET-Wörterbüchern verwalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage