Nested dictionary
Здравейте, колеги! Доста често като решавам задачи, свърззани с речници, ми се налага да използвам вложен речник за стойност, но изпитвам затруднение с OrderBy функцията, когато в условието ми искат подредба засягаща някое property на ключовете или стойностите от вложения речник. Например ако имам Dictionary<string, Dictionary<string, int>> exampleDictionary = new Dictionary <string, Dictionary<string, int>>(); и трябва да извърша подредба по ключа на речника, а след това някаква подредба, засягаща ключовете/стойностите във вложения речник се затруднявам с Lambda израза? Ще се радвам ако някой от по-опитните колеги ми обясни или link-не материал, където мога да прочета как се прави. Благодаря предварително!
Благодаря много за обяснението! Значи ако разбирам правилно всеки път щом използвам .OrderBy или .OrderByDescending трябва да закача .ToDictionary() и вече в него мога да използвам още веднъж .OrderBy, последвано с .ToDictionary() докато подредя всеки вложен речник по искания критерий (ключ, стойност, брой стойности на ключ ако са от тип лист например и т.н.)? Също искам да попитам по същия начин може ли да се постигне подредба първо по критерий, засягащ вътрешния речник и да се използва .ThenBy(), в който да се включи ламбда израз, засягащ външния речник, защото се мъчих да правя нещо подобно, но постоянно ми гърми с:
https://pastebin.com/ug4vRqGX -> ето това е целия код конкретно. Става въпрос за задачата Snowwhite от Associative Arrays - More exercises.
При дебъг информацията си се добавя точно, както се иска в условието, но на сортировката за output-a става гърмеж и се мъча цял ден да я направя, но не се получава.
Здравей, като цяло не ти препоръчвам да ползваш .ToDictionary() за сортировки, тъй като както е казал и колегата, Dictionary не е структура, която е предвидена да държи сортирани елементи. В простите ситуации това върши работа, тъй като речниците обикновено си пазят елементите в реда на добавянето им, но по тези задачи никога няма нужда от такива неща - може директно да се сортира и печата без да ги наливаме в структура.
Реално идеята на сортирането на нестнати речници е, че си пускаш един цикъл по елементите (KeyValuePair) на външния речник (сортирани с LINQ както ти е необходимо за печатането) и след това вътре си пускаш цикъл по елементите на вътрешния речник (отново сортирани с LINQ както ти е необходимо). Колкото до въпроса дали може да се използва информация от вътрешния речник като сортираме външния - да, няма проблеми. В твоя код дава грешка, тъй като се опитваш да използваш като критерий за сравнение цялата подредена колекция от числа вместо примерно да вземеш само първото (най-голямото от тях) след като ги подредиш.
Snowwhite задачата специално е изключение от стандартните за речници, тъй като сортирането изисква твърде много информация и само с един вложен речник няма как да се сортира независимо от сетъпа. Възможностите са или да го направим с клас както си я решил и ти (ето още един вариант с клас), или да сме по-креативни с речниците, примерно нещо такова.
Благодаря за разяснението. Ще ми бъде много полезно в бъдеще, когато ми се налага да използвам речници.