Existe algum benefício para os dicionários baseados em tuple ou aninhados?
Eu tenho procurado uma maneira de armazenar e recuperar valores em mais do que a única chave que a classe Dictionary genérica do C # fornece.
Pesquisando pela web (e no próprio SO) mostrou-me algumas opções:
Dicionários baseados em Tuple
O .NET 4.0 facilita o suporte a uma classe Tuple <,> genérica. Isso significa que você pode criar um dicionário a partir de qualquer Tuple arbitrário, ou seja,
var myDict = new Dictionary<Tuple<Char, Int>, MyClass>();
Dicionários Aninhados
Eu aprendi que você também pode aninhar Dicionários dentro de Dicionários, o que torna o acesso ao resultado armazenado semelhante ao acesso a um array N-Dimensional. Por exemplo:
Dictionary<int, Dictionary<int, Dictionary<Char, MyClass>>>
que poderia então ser acessado por:MyClass foo = MyData[8][3]['W'];
Dicionários-Chave Concatenados Delimitados
Mas enquanto ambostrabalhos bem para dados complexos e classes personalizadas, eu me pergunto se eles são sempre necessários. Para dados primitivos, pelo menos, parece que a concatenação das chaves com um delimitador é tão eficaz quanto.
//keys are char + int
Dictionary<string, MyClass> myDict = New Dictionary<string, Myclass>();
String input = myChar + "|" + myInt
MyClass foo = myDict[input]
Existem cenários que tornam um desses métodos superior ao outro? Eles terão tempos de desempenho semelhantes? Ou o foco deveria ser em qual método fornece o código mais limpo e fácil de manter?
Pensamentos?