Czy istnieje korzyść ze słowników opartych na krotkach lub zagnieżdżonych?

Szukałem sposobu na przechowywanie i pobieranie wartości na więcej niż jednym kluczu, który zapewnia ogólna klasa Dictionary C #.

Wyszukiwanie w internecie (i na samym sobie) pokazał mi kilka opcji:

Słowniki oparte na krotkach

.NET 4.0 ułatwia obsługę ogólnej klasy Tuple <,>. Oznacza to, że możesz stworzyć słownik z dowolnego dowolnego Tupla, tj.

var myDict = new Dictionary<Tuple<Char, Int>, MyClass>();

Zagnieżdżone słowniki

Dowiedziałem się, że można również zagnieżdżać słowniki w słownikach, co sprawia, że ​​dostęp do zapisanego wyniku jest podobny do dostępu do tablicy N-wymiarowej. Na przykład:

Dictionary<int, Dictionary<int, Dictionary<Char, MyClass>>>

które mogłyby być następnie nabyte przez:MyClass foo = MyData[8][3]['W'];

Rozdzielone połączone słowniki kluczowe

Ale podczas gdy obapraca dobrze dla złożonych danych i klas niestandardowych, zastanawiam się, czy zawsze są one konieczne. Dla danych pierwotnych przynajmniej wydaje się, że łączenie kluczy z ogranicznikiem jest równie skuteczne.

//keys are char + int
Dictionary<string, MyClass> myDict = New Dictionary<string, Myclass>();
String input = myChar + "|" + myInt
MyClass foo = myDict[input]

Czy są jakieś scenariusze, które czynią jedną z tych metod lepszą od drugiej? Czy będą miały podobne czasy działania? Czy należy raczej skupić się na tym, która metoda zapewnia najczystszy, najłatwiejszy w obsłudze kod?

Myśli?

questionAnswers(4)

yourAnswerToTheQuestion