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?

questionAnswers(4)

yourAnswerToTheQuestion