Uświadomiłem sobie, że nie przekazałem wystarczającej ilości informacji dla większości ludzi, aby przeczytać mój umysł i zrozumieć wszystkie moje potrzeby, więc zmieniłem to nieco z oryginału.Elegancki sposób tworzenia zagnieżdżonego słownika w C#
Powiedzmy mam listę elementów danej klasy tak:
public class Thing
{
int Foo;
int Bar;
string Baz;
}
I chcę kategoryzować ciąg Baz opartą na wartościach Foo, potem poprzeczkę. Nie będzie co najwyżej jednej rzeczy dla każdej możliwej kombinacji wartości Foo i Bar, ale nie mam gwarancji, że wartość dla każdego z nich. Może to pomóc w konceptualizacji go jako informacji o komórce dla tabeli: Foo to numer wiersza, Bar to numer kolumny, a Baz to wartość, którą można tam znaleźć, ale niekoniecznie musi być obecna wartość dla każdej komórki.
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.
}
}
}
Jaki jest łatwy, elegancki sposób generowania zagnieżdżonego słownika? Używam C# wystarczająco długo, że jestem przyzwyczajony do znalezienia prostego, jednoliniowego rozwiązania dla wszystkich typowych rzeczy takich jak ten, ale ten ma mnie zakłopotany.
Co to jest punkt wyjścia? Lista obiektów Rzecz? –
Dzięki za odpowiedzi do tej pory. Zaktualizowałem pytanie, aby było bardziej zrozumiałe. Wygląda na to, że niektórzy z was mieli już dobry pomysł. Kiedy przetestuję twoje odpowiedzi, zacznę awansować i przypisać zwycięzcę. – StriplingWarrior