Heim >Backend-Entwicklung >C++ >Wie kann ich ein Multi-Key-Wörterbuch in C# effizient implementieren?
Implementierungsmethode des C#-Mehrschlüsselwörterbuchs
Die .NET Base Class Library (BCL) verfügt nicht über ein integriertes Multi-Key-Wörterbuch, es stehen jedoch einige Open-Source-Optionen zur Verfügung.
Tupel als Schlüssel verwenden
Ein gängiger Ansatz besteht darin, Tupel als Schlüssel zu verwenden. Allerdings hat diese Methode einige Nachteile:
Benutzerdefinierte Tupelstruktur
Um diese Einschränkungen zu umgehen, können Sie eine benutzerdefinierte Tupelstruktur definieren:
<code class="language-csharp">public struct Tuple<T1, T2> { public readonly T1 Item1; public readonly T2 Item2; public Tuple(T1 item1, T2 item2) { Item1 = item1; Item2 = item2; } }</code>
Dies bietet Unveränderlichkeit, vorberechnete Hash-Codes und Gleichheitsvergleiche. Die beste Vorgehensweise besteht darin, die aussagekräftigsten Felder im ersten Element anzugeben.
ValueUtils-Bibliothek implementiert einen besseren Hashing-Algorithmus
Die ValueUtils-Bibliothek stellt eine FieldwiseHasher.Hash-Methode bereit, die einen zuverlässigeren Hash-Code für die Struktur erstellen kann und das Problem einer schlechten GetHashCode-Implementierung für Tupel löst.
Benannte Wertobjekte verbessern die Lesbarkeit
ValueUtils ermöglicht auch die Verwendung benannter Felder in Mehrfeldschlüsseln und verbessert so die Lesbarkeit des Codes:
<code class="language-csharp">sealed class MyValueObject : ValueObject<MyValueObject> { public DayOfWeek day; public string NamedPart; }</code>
Mit diesem Ansatz können Daten mit Wertesemantik sowohl benannte Mitglieder als auch korrekte Hash-Codes haben, bis die native Unterstützung für benannte Tupel mit guten Hash-Codes in einer zukünftigen C#-Version implementiert wird.
Das obige ist der detaillierte Inhalt vonWie kann ich ein Multi-Key-Wörterbuch in C# effizient implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!