Loading...
Vesso1980 avatar Vesso1980 486 Точки

Проблем със сортирането на вложени речници - October 2016 Exam Preparation II / 4. Roli The Coder

 

Здравейте колеги,

имам проблем със сортирането на вложени речници завършващи с вложен списък. (Dictionary<string, Dictionary<string, List<string>>>)

Искам да сортирам вътрешния речник по дължината на списъка, обаче, по начина, по който опитвам единственото нещо, което се получава е подредба по азбучен ред. Аз знам че конкретната задача може да се реши и без вложени речници, но аз искам да разбера това сортиране как се постига по принцип. Това ми е целия код - https://pastebin.com/zmBT321j , но частта която ме интересува е най вече сортирането накрая.

foreach (var item in eventList)               
            {
                foreach (var element in item.Value.OrderByDescending(x => x.Value.Count))
                {
                    Console.WriteLine($"{element.Key.ToString().Substring(1)} - {element.Value.Count}");
                    foreach (var participant in element.Value)
                    {
                        Console.WriteLine(participant);
                    }

                }

 

Благодаря предварително!

Тагове:
0
Programming Fundamentals
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

сорри но не разбирам въпроса ти? искаш да подредиш списъците или тоест list<string> по -list.lenght? така ли ?

това сортиране което си написал работи нормално както си го написал то ти ги подрежда по азбучен ред. Ти подреждаш вътрешния речник по ключа му стринг. Ако искаш по стойноста на вътрешния речник ще е нещо от сорта на

OrderByDescending(x => x.Value.Value.Count))

0
Vesso1980 avatar Vesso1980 486 Точки

Съжалявам, че не съм бил достатъчно ясен. Направо ще дам конкретне пример за да се онагледи каква ми е идеята. 

Получавам тези данни като вход - 

1 #Beers @roli @trophon @alice

2 #GameDevMeetup @sino @valyo

3 #Karaoke @nakov @royal @ROYAL @ivo

Номерата 1,2,3 са ми ключовете на външния речник, думите започващи с # са ми ключовете на вътрения а думите започващи с @ ги вкарвам в списъка на вътрешния речник.

И за изход трябва да отпечатам ключовете на вътрения речник подредени по дължина на списъка. 

Или трябва да изглежда така :

Karaoke - 4
@ivo
@nakov
@royal
@ROYAL

Beers - 3
@alice
@roli
@trophon
GameDevMeetup - 2
@sino
@valyo
 

 А при мен излизат по азбучен ред, вместо по брой неща в списъка:

Beers - 3
@alice
@roli
@trophon
GameDevMeetup - 2
@sino
@valyo
Karaoke - 4
@ivo
@nakov
@royal
@ROYAL

Опитах и с OrderByDescending(x => x.Value.Value.Count)), обаче не ми позволява да напиша второто value, подчертава го в червено.

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

не разбрал съм те перфектно просто, беше малко объркващо на писано x.value.length? след като си с списък.A и можеш ли да кажеш x.value.values? каква грешка ти хвърля?

 

https://stackoverflow.com/questions/43549323/how-to-sort-by-descending-nested-dictionary-in-c-sharp-using-linq

https://stackoverflow.com/questions/32901570/sort-2-dictionaries-linq-c-sharp

0
Vesso1980 avatar Vesso1980 486 Точки

Ами да всъщност стана и с values, но трябва да е в този вид към външния речник. 

OrderByDescending(x => x.Value.Values.Sum(y => y.Count))

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

както казах от август не съм писал с# и синтаксиса малко ми бяга. Но радвам се че е станало. Смисъл при теб проблема не беше сортирането което правиш,а къде го правиш.

ти сортираше правилно но външния речник.С value.values... сортираш стойностите на вътрешния. Надявам се е било полезно за теб,

0
Vesso1980 avatar Vesso1980 486 Точки

О, да беше полезно, благодаря за помощта!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.