Я понял, что не дал достаточной информации для большинства людей, чтобы читать мои мысли и понимать все мои потребности, поэтому я несколько изменил это из оригинала.Элегантный способ создания вложенного словаря в C#
Скажем, у меня есть список элементов класса, как это:
public class Thing
{
int Foo;
int Bar;
string Baz;
}
И я хочу, чтобы классифицировать строку Баз на основе значений Foo, затем Bar. Для каждой возможной комбинации значений Foo и Bar будет не более одной Thing, но я не гарантированно получаю ценность для каждого из них. Это может помочь концептуализировать его как информацию о ячейке для таблицы: Foo - номер строки, Bar - номер столбца, а Baz - это значение, которое можно найти там, но не обязательно будет значение, присутствующее для каждой ячейки.
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.
}
}
}
Что такое простой, элегантный способ создания вложенного словаря? Я слишком долго использовал C#, чтобы привыкнуть к поиску простых однострочных решений для всех подобных вещей, но это меня настораживает.
Что отправной точкой? Список объектов Thing? –
Спасибо за ответы. Я обновил вопрос, чтобы сделать его более понятным. Похоже, у некоторых из вас была правильная идея. После того, как я проведу ваши ответы, я начну выигрывать и назначать победителя. – StriplingWarrior