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?