Loading...

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

GerganaTsirkova avatar GerganaTsirkova 17 Точки

Array histogram

 Здравейте колеги. Реших да направя следната задача с речници:

https://judge.softuni.bg/Contests/427/Array-and-List-Algorithms-Exercises

Имам обаче сериозен проблем със сортирането на речници. Някой може ли да ми каже как да принтирам речника OrderByDescending по value на вложения цикъл?

Това е моят код:

https://pastebin.com/Mhnk1Kk6

Тагове:
0
Programming Fundamentals 11/03/2018 14:12:37
k.sevov avatar k.sevov 1077 Точки
Best Answer

В този случай може да стане по този начин - https://pastebin.com/5P0Yers4. Тъй като във вложения речник винаги имаш само по един елемент можем да си позволим да сортираме външния по първия ключ на вътрешния (x.Value.Keys.First()). Разбира се, когато ще имаме само по един елемент в речник, то може въобще да не правим такъв. Примерно можеш да си ги пазиш двете стойности в структура като KeyValuePair<int, double> или просто с един речник dict<string, int> и да си смяташ процентите накрая в печатането - нещо такова например. 

0
11/03/2018 14:27:06
GerganaTsirkova avatar GerganaTsirkova 17 Точки

Благодаря за отговора. Един път се опитах да използвам KeyValuePair и не успях изобщо. Мъгла ми е тази структура. А по принцип ако нямах по един елемент във вложения речник, как щях да сортирам същия речник по Value на вложения цикъл.Taка ли:

foreach (var str in myDict.OrderByDescending(x => x.Value.Values))
            {
                Console.Write($"{str.Key} -> ");
                foreach (var s in str.Value)
                {
                    Console.WriteLine($"{s.Key} times ({s.Value:f2}%)");
                }
            }

А съответно сортирането по Key на вложения цикъл трябва да изглежада така ли:

foreach (var str in myDict.OrderByDescending(x => x.Value.Keys))
            {
                Console.Write($"{str.Key} -> ");
                foreach (var s in str.Value)
                {
                    Console.WriteLine($"{s.Key} times ({s.Value:f2}%)");
                }
            }

 

0
GerganaTsirkova avatar GerganaTsirkova 17 Точки

Имам и още един въпрос. Защо когато махна First() програмата даже и не тръгва. Нали имам по един елемент, защо ми е този First()

0
k.sevov avatar k.sevov 1077 Точки

Keys ти връща колекция от ключовете и когато нямаш First(), OrderBy се опитва да ти сравнява самите колекции. Тъй като колекциите не е ясно как да се сравняват, получаваш тази грешка "at least one object must implement IComparable". По другите въпроси не е логично да сравняваме по ключове или стойности от вътрешния речник, когато в него има повече елементи, освен ако не уточним кой от тях да се използва за сравнението. Можем да сравняваме примерно по най-големия от тях, най-малкия, сумата им (както си ги написала слагаш .Max()/.Min()/.Sum() накрая) или с други думи трябва ламбда функцията в OrderBy да връща само един елемент, по който да може да сравнява.

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