Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

krum_43 avatar krum_43 750 Точки

Как мога да сортирам вложен речник?

В една изпитна задача се налага да сортирам вложен речник от вида: date=<string,Dictionary<string,int>.

Направил съм всичко необходмо и искам да си изведа речника,но за целта ми е необходимо да сорирам речника по Valuo-то на вътрешният речник.

Правя си foreach цикъл и пиша:

foreach (var name in date.OrderByDescending(s => s.Value.Values).Keys)

{

..................................................................

}

,    но VS не го приема за верно(оцветява последната дума Keys в червено).

Къде греша и как да го оправя?     

Тагове:
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки
Best Answer

Махни keys ... те value.values са ти ключовете

0
krum_43 avatar krum_43 750 Точки

Мерси майна,

Асистенцията ти е успешна,но сега (след като махнах Keys) ми излиза нова грешка:

Във сколпа на foreach-a  се опитвам да завъртя втори foreach,но VS ми казва ,че не мога да достъпя вътрешното Dictionary със:

date[name]-name е подчертано с червено.

 foreach (var name in date.OrderByDescending(s => s.Value.Values)
                    {
                        foreach (var color in date[name].Keys)
                        {
                            Console.WriteLine($"({color}) {name} <-> {date[name][color]}");
                        }
                    }

Имаш ли идея как да завъртя вътрешния цикъл по ключовете на вътрешният речник?

                                                                           :)

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

Ами правиш глупости. Foreach не позволява такива неща и итерирането по различни индекси. Просто смени поредицата няма как докато foreach -ваш вътрешния да итерираш върху външния ... а и ти ключа го имаш ще ти е нещо от сорта на. [date][key][name] и толкова. Малко не разбшрам какво се опитваш да направиш. И честно с един лек обект тжва ще стане с пъти по -лесно.

0
krum_43 avatar krum_43 750 Точки

Става въпрос за една изпитна задача от тех-а,която се опитвам да напиша на C#.-Snowwhite.

Условието може да се види от тук:

https://softuni.bg/trainings/resources/officedocument/32247/exercise-problem-descriptions-group-2-programming-fundamentals-may-2018/1939

След като получим вход"Имало едно време" трябва да се изпринти речника dwarfdate,сортиран по Value-то на вътрешния ключ във възходящ ред(orderbydecsending).

Това се опитвам да направя.

                  :)

0
krum_43 avatar krum_43 750 Точки

Ето и моето решение, с което стигхах до 10/100.

pastebin.com/eFzVH5TC

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

уф подхода ти е грешен,значи тука имаш  съвсем лесно сортиране това с обект ще стане с пъти оп лесно но както и да е.ю

давай по-добри имена на променливите по дяволите какви са тея date и тн

имаш един речник dictionary<string,<dictionary<string,int>> all dwarves  като цвета ти е първия ключ и името на dwarf-a втория. и после ства лесно

2 сортирания 

alldwaves.orderbydesending(x=>x.Value.Value).ThenBy(x=>x.Value.Count); това да ти ги подреди цветовете според броя на джуджетата в тях

не ти трябва нищо fancy после foreach color in alldwarves ти е външното обхождане и вътре foreach dwarf in color ... и печаташ доста е простичка, но с обекти ще стане с пъти по опростена.

1
krum_43 avatar krum_43 750 Точки

Не знам защо,но при сортиранато на речника кода се чупи:

pastebin.com/7emd8yhu

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