Me di cuenta de que no daba suficiente información para que la mayoría de las personas leyeran mi mente y entendieran todas mis necesidades, así que cambié esto un poco del original.Manera elegante de crear un diccionario anidado en C#
Di Tengo una lista de elementos de una clase como esta:
public class Thing
{
int Foo;
int Bar;
string Baz;
}
y quiero categorizar la cadena Baz basado en los valores de Foo, luego de barras. Habrá como máximo una cosa para cada posible combinación de valores de Foo y Bar, pero no estoy seguro de que tenga un valor para cada uno. Puede ayudar a conceptualizarlo como información de celda para una tabla: Foo es el número de fila, Bar es el número de columna y Baz es el valor que se encuentra allí, pero no necesariamente habrá un valor presente para cada celda.
IEnumerable<Thing> things = GetThings();
List<int> foos = GetAllFoos();
List<int> bars = GetAllBars();
Dictionary<int, Dictionary<int, string>> dict = // what do I put here?
foreach(int foo in foos)
{
// I may have code here to do something for each foo...
foreach(int bar in bars)
{
// I may have code here to do something for each bar...
if (dict.ContainsKey(foo) && dict[foo].ContainsKey(bar))
{
// I want to have O(1) lookups
string baz = dict[foo][bar];
// I may have code here to do something with the baz.
}
}
}
¿Cuál es una manera fácil y elegante de generar el diccionario anidado? He estado usando C# el tiempo suficiente para acostumbrarme a encontrar soluciones sencillas de una sola línea para todas las cosas comunes como esta, pero esta me tiene perplejo.
Cuál es el punto de partida? Una lista de objetos Thing? –
Gracias por las respuestas hasta el momento. He actualizado la pregunta para que quede más clara. Parece que algunos de ustedes ya tuvieron la idea correcta. Una vez que pruebe tus respuestas, comenzaré a votar y asignaré un ganador. – StriplingWarrior