Проблем със сортирането на вложени речници - 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);
}
}
Благодаря предварително!
Съжалявам, че не съм бил достатъчно ясен. Направо ще дам конкретне пример за да се онагледи каква ми е идеята.
Получавам тези данни като вход -
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, подчертава го в червено.
не разбрал съм те перфектно просто, беше малко объркващо на писано 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
Ами да всъщност стана и с values, но трябва да е в този вид към външния речник.
OrderByDescending(x => x.Value.Values.Sum(y => y.Count))
както казах от август не съм писал с# и синтаксиса малко ми бяга. Но радвам се че е станало. Смисъл при теб проблема не беше сортирането което правиш,а къде го правиш.
ти сортираше правилно но външния речник.С value.values... сортираш стойностите на вътрешния. Надявам се е било полезно за теб,
О, да беше полезно, благодаря за помощта!