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

Проблем със сортирането на вложени речници - 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 791 Точки

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

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

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

0
Vesso1980 avatar Vesso1980 375 Точки

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

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

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 791 Точки

не разбрал съм те перфектно просто, беше малко объркващо на писано 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 375 Точки

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

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

0
TeodorStefanovPld avatar TeodorStefanovPld 791 Точки

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

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

0
Vesso1980 avatar Vesso1980 375 Точки

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

0