Dictionaries, Lambda and LINQ - Exercise 06.Courses
Здравейте, знам че не съм подходил по най-правилния начин, но въпроса ми е:
Имам проблем с принтирането на студентина по азбучен ред, не знам как да ги суртирам при полужение, че вече веднъж сортирам по курсове? Въпроса ми е , как да направя сортирането на студентите?
Задача:
6.Courses
Write a program, which keeps information about courses. Each course has a name and registered students.
You will receive course name and student name, until you receive the command "end". Check if such course already exists, and if not, add the course. Register the user into the course. When you do receive the command "end", print the courses with their names and total registered users, ordered by the count of registered users in descending order. For each contest print registered users ordered by name in ascending order.
Input
- Until you receive "end", the input come in the format: "{courseName} : {studentName}".
- The product data is always delimited by " : ".
Output
- Print information about each course, following the format:
"{courseName}: {registeredStudents}" - Print information about each student, following the format:
"-- {studentName}"
Examples
Input |
Output |
Programming Fundamentals : John Smith Programming Fundamentals : Linda Johnson JS Core : Will Wilson Java Advanced : Harrison White end |
Programming Fundamentals: 2 -- John Smith -- Linda Johnson JS Core: 1 -- Will Wilson Java Advanced: 1 -- Harrison White |
Algorithms : Jay Moore Programming Basics : Martin Taylor Python Fundamentals : John Anderson Python Fundamentals : Andrew Robinson Algorithms : Bob Jackson Python Fundamentals : Clark Lewis end |
Python Fundamentals: 3 -- Andrew Robinson -- Clark Lewis -- John Anderson Algorithms: 2 -- Bob Jackson -- Jay Moore Programming Basics: 1 -- Martin Taylor |
Решение:https://pastebin.com/bKnhX1vT
Проблема е, че не знам, как да вляза в класа и след това в листа и да подреда само лист.
Няма как. Като цяло без basic OOP по-лесно ще ти е с някакви вложени колекции: Dictionary<string, List<string> примерно. От гледна точка на енкапсулация, никога не трябва да се връща вътрешна колекция, която да не е read-only(IReadOnlyCollection<T> etc.), защото ще счупи state-а на обекта. Всеки може да добавя/трие и извършва други манипулации върху нея. Ползваш клас когато темата е за речници и функционално програмиране ?
В твоят случай най-лесно ще е както ти обясних в предишния пост:
Можеш и .Sort() да ползваш вместо OrderBy() за студентите.
Ако се опиташ тук да ги сортираш, ще ги сортираш с default-ния comparer (адрес на референция на съответния лист):
Ако искаш да ползваш клас, правиш листа като field без auto пропърти и си изкарваш метод за добавяне на студенти след което ще връщаш листa през calculated property, което да ги сортира и връща като read-only или ще използваш друг тип колекция (SortedSet).