Loading...
GeorgiKostadinov933 avatar GeorgiKostadinov933 7 Точки

04 SoftUni Beer Pong Lambda and LINQ - Exercises Problem: Sorting Nested Dicitonary with ThenBy

Здравейте
Може ли някой да обясни защо на този код последния сортинг не сортира :
.ThenByDescending(x => x.Value.Values) ?
Няма ли вариант да реша проблема без да презаписвам dictionary-to..?

foreach (KeyValuePair<string,Dictionary<string,int>> item in myDictionary
.Where(x => myDictionary[x.Key].Count > 2 )
.OrderByDescending(x => x.Value.Sum(h => x.Value[h.Key]))
.ThenByDescending(x => x.Value.Values)
)
Result:

Pesho|TechModule|32
Kaloyan|TechModule|14
Meto|TechModule|24

Pesho|Destroyers|20
Gosho|Destroyers|35
Stefan|Destroyers|12

expected:

Pesho|TechModule|32
Meto|TechModule|24
Kaloyan|TechModule|14

Gosho|Destroyers|35
Pesho|Destroyers|20
Stefan|Destroyers|12

-------------

Задача.

In SoftUni it is time for the annual beer pong tournament. Last year the competition was a total disaster, because nobody was in “condition” to keep track of the scores. Now it is your job to write a program, which will keep track of the total results. The competition’s rules are simple:

  • contestants are divided into teams
  • Every team should have exactly 3 participants
  • After a team has a total of 3 participants, any further attempt to add a participant should be ignored.
  • If a team has less than 3 participants – it gets disqualified and should not be printed.

Until you receive the command “stop the game” you will receive lines of input in the following format:

team|player|pointsMade

The total score of the team is the sum of the points made from every player.

Print every team, which has enough players in the following format:

{teamPosition}. {teamName}; Players:

###{firstPlayerName}: {points}

###{secondPlayerName}: {points}

###{thirdPlayerName}: {points}

Order the teams by total points in descending order and order each team’s players by the amount of points made, again in descending order.

Constraints

  • You will not receive a player’s name, which already exists in the team it’s trying to be inserted into.
  • Points will be in the interval [0…2147483647].
  • The total points of the teams and the points of the players in the same team will not be equal.

 

 

Тагове:
0
Programming Fundamentals 18/11/2017 20:29:32
IvayloIvanovV avatar IvayloIvanovV 83 Точки

Дай линк за цялата задача или твоето решение.

0
GeorgiKostadinov933 avatar GeorgiKostadinov933 7 Точки

Качих го:)

Problema koito me muchi e che iskam da napravq sortiraneto edin put v purviq foreach kato printiram a ne na na 2-riq..

0
IvayloIvanovV avatar IvayloIvanovV 83 Точки

Най- добре според мен е първо да извадиш сбора от резултата на отборите  //.OrderByDescending(a => a.Value.Sum(p => p.Value)) , а след това в foreacha да завъртиш втори foreach за вътрешното Dictionary и да подредиш самите участници //.OrderByDescending(k => k.Value).

Така както ти си ги направил ще ти подреди отбора с най- много точки и ако има два отбора с еднакви точки чак тогава ще влезеш в //.ThenByDescending(x => x.Value.Values) .

Питай, ако има нещо неясно или ако се затрудняваш ми прати твое решение, за да го обсъдим. wink

0
GeorgiKostadinov933 avatar GeorgiKostadinov933 7 Точки

Taka i ne namerih reshenie da go napravq na edin put sortiraneto no naistina e po dobre da go sloja v vtoriq foreach kakto ti predloji.

Sled kato gledah reshenieto ot lektora si napravih 100% no edinstvenata razlika ot moeto reshenie e nachina po koito iztrivam element ot dictionary.

Moje li da popitam ako i se zanimvava zashto stava tova?

Shte kacha reshenieto koeto vadi 80 % i tova s 100%. Sled analiz edinstvenoto koeto promenqm po koda ot 80 % da ide na 100 % e nachinna na delete na dictionary.. ili tezi 3 reda:

exlain: Kogato pravq flatten na nqkoi element, sled kato dobavq vsichki elementi v flattened dict nakraq trqbva da delete key ot No-flattened dictionary . Probvah s 2 nachina da delete-na key ot No-flattened dict :

s 80 % :

normalProduct = normalProduct.Where(x => x.Key != type).ToDictionary(x => x.Key, y => y.Value);
normalProduct.Add(type, new Dictionary<string, string>());

s 100%
normalProduct.Remove(type);
normalProduct.Add(type, new Dictionary<string, string>());

Kato karam s debug, nqma vidima razlika kakvo se sluchva:(

 

80% solution:  https://pastebin.com/fzwTxwNe

100% solution:  https://pastebin.com/gm0FtQBZ

 

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