Софтуерно Инженерство
Loading...
peter1998 avatar peter1998 5 Точки

Колеги малко помощ с нестед речници c# fundamentals

Колеги немога да изпринтирам valueto на речника в речника тоест да сортирам по него да се изпринтирва ключа малко объркващо звучи , но прегледайте условието на задачата 
-02. Tagram  C# Advanced Exam - 14 October 2018 https://judge.softuni.bg/Contests/Practice/Index/1289#1 
-ето и моето решение което не е правилно в изпринтирването https://pastebin.com/c2x1R81Q

Тагове:
Filkolev avatar Filkolev 4502 Точки

Виж внимателно какво се иска в условието: "At that point you should print the users, ordered by total likes in desecending order, then ordered by the tags’ count in ascending order". Има два критерия, по които се сортират потребителите - единият е основен (общо лайкове), а другият (брой тагове за потребителя) се ползва, когато общите лайкове са еднакви за няколко потребителя. Ти ползваш само един критерий, който е по име. След това пък сортираш таговете по броя лайкове, което не се иска в задачата.

П.П. Условието не е изчерпателно, понеже не казва изрично как се подреждат таговете за всеки потребител. Може да се предположи, че е по ред на пристигане, но без да е уточнено, едно решение с вложен речник (без допълнително да се пази реда на таговете) не е гарантирано коректно.

 

0
peter1998 avatar peter1998 5 Точки

ахааа да , условието е малко игнорирано , добре имаш ли нещо против да пипнеш само сортировката която мисля ,че е по сложен linQ Или ти имаш идея нов речник и по него тотал лайкс , моля те пусни едно кодче по полезно ще ми е .
Ако можеш желая ти хубав ден !

0
Filkolev avatar Filkolev 4502 Точки

По принцип не обичам да давам готов код :) Предпочитам поредица от насоки, които в някакъв момент да помогнат човек сам да си изгради решението.

В случая решение с вложен речник работи. По твоя код корекциите са минимални (от гледна точка на променени редове). Това, което трябва, е да махнеш вътрешната сортировка, а външната да я коригираш спрямо условието с две последователни сортирания. Схемата е следната:

Tagram.OrderByDescending(x => /* сумата от всички лайкове за всички тагове */).ThenBy(x => /* брой тагове */)

Втората сортировка е по-лесна, трябва ти броя тагове, което лесно може да достъпиш. За ключа х имаме като стойност речник и на този речник искаме размера (т.е. брой KeyValuePair записи).

Първото сортиране е малко по-особено. Схемата е следната - за ключа х взимаме вложения речник с таговете и трябва да намерим сумата на лайковете за всички тагове. Има начин да вземеш като колекция директно стойностите на вложения речник, демек само броя лайкове и след това да ги сумираш.

Почовъркай още малко по кода и ако не се получи ще копирам корекцията, която направих по твоето решение.

0
peter1998 avatar peter1998 5 Точки

Колега 100 от 100 , реших проблема като почовърках малко , схемата беше да махна вътрешната сортировка и да оправя вътрешната като условието 

 

 foreach (var username in Tagram.OrderByDescending(x=>x.Value.Values.Sum()).ThenBy(x=>x.Value.Keys.Count))
        {
            Console.WriteLine(username.Key);

            foreach (var item in username.Value)
            {
                Console.WriteLine($"- {item.Key}: {item.Value}");
            }
        }

Поздрави и Благодаря

0