Язык программирования C#9 и платформа .NET5
Часть 207 из 642 Информация о книге
// Удалить всех из очереди.GetCoffee(peopleQ.Dequeue());GetCoffee(peopleQ.Dequeue());GetCoffee(peopleQ.Dequeue());// Попробовать извлечь кого-то из очереди сноваtry{GetCoffee(peopleQ.Dequeue());}catch(InvalidOperationException e){Console.WriteLine("Error! {0}", e.Message); //Ошибка! Очередь пуста.}// Локальная вспомогательная функцияstatic void GetCoffee(Person p){Console.WriteLine("{0} got coffee!", p.FirstName);}}Здесь с применением метода
вEnqueue()вставляются три элемента. ВызовQueue<T>позволяет просматривать (но не удалять) первый элемент, находящийся в текущий момент внутриPeek(). Наконец, вызовQueueудаляет элемент из очереди и передает его на обработку вспомогательной функцииDequeue(). Обратите внимание, что если попытаться удалить элемент из пустой очереди, то сгенерируется исключение времени выполнения. Ниже показан вывод, полученный в результате вызова методаGetCoffee():UseGenericQueue()***** Fun with Generic Collections *****Homer is first in line!Homer got coffee!Marge got coffee!Lisa got coffee!Error! Queue empty.Работа с классом SortedSet<T>
Класс
полезен тем, что при вставке или удалении элементов он автоматически обеспечивает сортировку элементов в наборе. Однако классуSortedSet<T>необходимо сообщить, каким образом должны сортироваться объекты, путем передачи его конструктору в качестве аргумента объекта, который реализует обобщенный интерфейсSortedSet<T>.IComparer<T>Начните с создания нового класса по имени
, реализующего интерфейсSortPeopleByAge, гдеIComparer<T>— типТ. Вспомните, что в этом интерфейсе определен единственный метод по имениPerson, в котором можно запрограммировать логику сравнения элементов. Вот простая реализация:Compare()using System.Collections.Generic;namespace FunWithGenericCollections{class SortPeopleByAge : IComparer<Person>{public int Compare(Person firstPerson, Person secondPerson){if (firstPerson?.Age > secondPerson?.Age){return 1;}if (firstPerson?.Age < secondPerson?.Age){return -1;}return 0;}}}Теперь добавьте в класс
следующий новый метод, который позволит продемонстрировать применениеProgram:SortedSet<Person>static void UseSortedSet(){<b> // Создать несколько объектов Person с разными значениями возраста.</b>SortedSet<Person> setOfPeople = new SortedSet<Person>(new SortPeopleByAge()){new Person {FirstName= "Homer", LastName="Simpson", Age=47},new Person {FirstName= "Marge", LastName="Simpson", Age=45},new Person {FirstName= "Lisa", LastName="Simpson", Age=9},new Person {FirstName= "Bart", LastName="Simpson", Age=8}};<b> // Обратите внимание, что элементы отсортированы по возрасту.</b>foreach (Person p in setOfPeople){Console.WriteLine(p);}Console.WriteLine();<b> // Добавить еще несколько объектов Person с разными значениями возраста.</b>setOfPeople.Add(new Person { FirstName = "Saku", LastName = "Jones", Age = 1 });setOfPeople.Add(new Person { FirstName = "Mikko", LastName = "Jones", Age = 32 });<b> // Элементы по-прежнему отсортированы по возрасту.</b>foreach (Person p in setOfPeople){Console.WriteLine(p);}