Heim >Backend-Entwicklung >C++ >Wie kann ich ein Multi-Key-Wörterbuch in C# effizient implementieren?

Wie kann ich ein Multi-Key-Wörterbuch in C# effizient implementieren?

DDD
DDDOriginal
2025-01-08 19:11:53435Durchsuche

How Can I Efficiently Implement a Multi-Key Dictionary in C#?

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:

  • Die standardmäßige GetHashCode-Implementierung berücksichtigt nur das erste Feld, was zu potenziellen Skalierbarkeitsproblemen führt.
  • Nullwerte erschweren die Sache.

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!

Stellungnahme:
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