Beste Annäherung an den mehrteiligen int Wörterbuchschlüssel?

8

Sagen Sie, dass mein Wörterbuch durch eine Kombination von ItemId und RegionId, beide int, eingegeben werden muss. Und sagen Sie, der Typ der Werteseite ist "Daten". Ich könnte das auf verschiedene Arten tun:

Weg 1: mehrstufiges Wörterbuch, wie folgt:

%Vor%

so könnte ein Lookup wie folgt codiert werden:

%Vor%

Nicht schlecht, aber ein Nachteil ist, dass ich auf der ersten Ebene nach dem Vorhandensein des Schlüssels suchen müsste, damit sicherer Code wäre

%Vor%

Weg 2: Verwenden Sie einen mehrteiligen Schlüssel. In diesem Ansatz würde ich eine Struktur erstellen, um die Teile darzustellen, und eine Struktur als Wörterbuchschlüssel verwenden:

%Vor%

und eine Suche wäre wie folgt:

%Vor%

Ein möglicher Nachteil hierbei ist, dass es nur funktioniert, wenn meine Struktur vollständig aus einfachen Werttypen besteht, so dass ein bitweiser Vergleich zweier Instanzen gleich ist. (Richtig?)

Was denkst du?

    
Elroy Flynn 11.02.2011, 21:58
quelle

2 Antworten

17

Anstatt Ihre Struktur so "dumm" zu machen (und veränderbar), können Sie sie unveränderlich machen und ihr geeignete Gleichheitsmethoden geben, z. B.

%Vor%

Sie können das erweitern, um die gewünschten Typen zu verwenden, solange Sie Gleichheit und Hashcode richtig implementieren. Das Implementieren von IEquatable<MultiPartKey> bedeutet, dass das Wörterbuch die Schlüssel nicht komprimieren muss, um sie zu vergleichen.

Der Nachteil dieser Methode anstelle von Dictionary<int, Dictionary<int, Data>> besteht darin, dass Sie nicht alle Einträge für eine bestimmte Element-ID finden können.

    
Jon Skeet 11.02.2011, 22:06
quelle
11

Noch ein anderer Weg wäre die Tuple Klasse:

%Vor%

Dies funktioniert mit bis zu acht Werten, vorausgesetzt, sie implementieren Equals und GetHashCode .

    
Codo 11.02.2011 22:07
quelle

Tags und Links