Loading...
Lyubomir_92 avatar Lyubomir_92 0 Точки

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

 

 

Тагове:
0
Fundamentals Module
VasilKotsev avatar VasilKotsev 830 Точки

Трябва да foreach-неш листа със студенти и да ги order-неш по условие. Можеш да ползваш SortedSet, но това ще работи докато не срещнеш двама студенти с еднакви имена. За да сортираш по-повече от един критерии трабва да ползваш .ThenBy() / ThenByDescending().

0
Lyubomir_92 avatar Lyubomir_92 0 Точки

Проблема е, че не знам, как да вляза в класа и след това в листа и да подреда само лист. 

0
VasilKotsev avatar VasilKotsev 830 Точки

Няма как. Като цяло без basic OOP по-лесно ще ти е с някакви вложени колекции: Dictionary<string, List<string> примерно. От гледна точка на енкапсулация, никога не трябва да се връща вътрешна колекция, която да не е read-only(IReadOnlyCollection<T> etc.), защото ще счупи state-а на обекта. Всеки може да добавя/трие и извършва други манипулации върху нея. Ползваш клас когато темата е за речници и функционално програмиране ?

В твоят случай най-лесно ще е както ти обясних в предишния пост:

foreach (var kvp in SortedCoursesAndStudents)
{
    Console.WriteLine($"{kvp.Courses}: {kvp.People}");

    foreach (var student in kvp.Students.OrderBy(x => x))
    {
        Console.WriteLine($"-- {student}");
    }
}

Можеш и .Sort() да ползваш вместо OrderBy() за студентите.

Ако се опиташ тук да ги сортираш, ще ги сортираш с default-ния comparer (адрес на референция на съответния лист):

var SortedCoursesAndStudents = CoursesAndStudents
               .OrderByDescending(x => x.People)
               .ThenBy(x => x.Students);

Ако искаш да ползваш клас, правиш листа като field без auto пропърти и си изкарваш метод за добавяне на студенти след което ще връщаш листa през calculated property, което да ги сортира и връща като read-only или ще използваш друг тип колекция (SortedSet).

 

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