First person item is: Name: Homer Simpson, Age: 47
Popped off Name: Homer Simpson, Age: 47
Error! Stack empty.
Работа с классом Queue
Очереди — это контейнеры, которые обеспечивают доступ к элементам в стиле "первый вошел — первый вышел" (FIFO). К сожалению, людям приходится сталкиваться с очередями практически ежедневно: в банке, в супермаркете, в кафе. Когда нужно смоделировать сценарий, в котором элементы обрабатываются в режиме FIFO, класс Queue
Queue определены основные члены, перечисленные в табл. 10.6.Теперь давайте посмотрим на описанные методы в работе. Можно снова задействовать класс Person
Queue, эмулирующий очередь людей, которые ожидают заказанный кофе.static void UseGenericQueue()
{
// Создать очередь из трех человек.
Queue
peopleQ.Enqueue(new Person {FirstName= "Homer", LastName="Simpson", Age=47});
peopleQ.Enqueue(new Person {FirstName= "Marge", LastName="Simpson", Age=45});
peopleQ.Enqueue(new Person {FirstName= "Lisa", LastName="Simpson", Age=9});
// Заглянуть, кто первый в очереди.
Console.WriteLine("{0} is first in line!", peopleQ.Peek().FirstName);
// Удалить всех из очереди.
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 вставляются три элемента. Вызов 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
Класс SortedSet
SortedSet необходимо сообщить, IComparer.Начните с создания нового класса по имени SortPeopleByAge
IComparer, где Т — тип Person. Вспомните, что в этом интерфейсе определен единственный метод по имени Compare(), в котором можно запрограммировать логику сравнения элементов. Вот простая реализация:using System.Collections.Generic;
namespace FunWithGenericCollections
{
class SortPeopleByAge : IComparer
{
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:static void UseSortedSet()
{