Професионална програма
Loading...
+ Нов въпрос
Curious avatar Curious 33 Точки

[Homework] Programming Fundamentals - Objects and classes - Exercise 04 - Average Grades

Здравейте, имам проблем със сортирането на данните при изхода.

https://softuni.bg/downloads/svn/soft-tech/May-2016/Programming-Fundamentals-May-2016/06.%20Programming-Fundamentals-Objects-and-Classes/06.%20Programming-Fundamentals-Objects-and-Classes-Exercises.docx - Линк към документа на заданието

 

http://pastebin.com/F2fK4LM0 - Линк към кода ми.

 

Проблемът е, че когато входът съдържа повтарящи се ключове (Имена на студенти в случая) хвърля exception. Очевидно OrderedList не е най-подходящата структура от данни за случая. Основният ми въпрос е: Коя структура от данни би ми позволила да държа данни в подреден ред със дубликати на ключовете по възможно най-мързеливият начин?

Допълнителни въпроси:

  • Щом листът не допуска повтарящи се ключове, каква е разликата между Ordered List и Ordered Dictionary, освен performance, memory usage etc. ?
  • Как бих могъл да сортирам по два начина едновременно структурата (Веднъж по име [с висок приоритет] и втори път по средноаритметичната оценка [ с нисък приоритет] )

Наясно съм, че може да се направи с повече код задачата, но ми се ще да не променям много много структурата на програмата, понеже до тук ми се струва сравнително елегантно решението, може представата за елегантност да ми е погрешна разбира се (не съм минал КПК (: ). Благодаря предварително (:

0
Fundamentals Module
Nikola_Andreev avatar Nikola_Andreev 668 Точки
Best Answer

Не знам за такава структура от данни която да допуска 2 еднакви ключа и не би било коректно да има таква. Тук целта е да си направиш обект студент, който да има - име и оценки, и след това ги вкарваш в списък. 

Относно следващия въпрос, основната разлика е че в речника може ключовете да са ти от всякакъв тип, а в листа могат да са само int.

List.orderBy(а => а.firstName).thenBy(b => b.lastName);  - Така се сортира по 2 критерия едножременно. В скобите трябва да е параметър валиден за елементите на дадения списък.

0
Curious avatar Curious 33 Точки

Листът е generic, така че може всякакви типове данни да слагаш вътре. В неподредения лист можеш да слагаш повтарящи се елементи, докато в подредения не можеш.

orderBy/thenBy бяха полезни, обаче ги подрежда наобратно поради някаква причина и трябва да слагам Reverse(). 

http://pastebin.com/cwgF5CwC

Минава нулевите тестове, и дава грешни отговори на 6/8, 20 от 100 точки :D. Май ще я правя наново изоснови утре.

0
10/09/2016 01:28:10
Nikola_Andreev avatar Nikola_Andreev 668 Точки

Да можеш да слагаш всякакви типове данни в листа, но индексите им ще са различни - нали именно за тях питаше. Щом ти ги сортира на обратно има orderByDescending, което ще ти ги сортира в обратен ред спрямо orderBy. Нопри теб проблема е че този ред въобще не ти сортира: list.OrderBy(x => x._name).ThenBy(x => x._averageGrade);

Трябва да е ето така за да работи : list = list.OrderBy(x => x._name).ThenBy(x => x._averageGrade).toList();

1
Curious avatar Curious 33 Точки

Прав си, избутахме до 50/100.

EDIT: 100/100 бях изпуснал един по-малко или равно знак. Благодаря ти за помоща.

0
10/09/2016 14:17:47
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Подреждането беше голямо главоблъскане. Трябваше да открия, че имало и такова чудо, като ThenByDescending, за да докарам задачата до 100%: http://pastebin.com/tPktJY1v

0