Читаем Язык программирования C#9 и платформа .NET5 полностью

***** Fun with Generic Collections *****

First person is: Name: Lisa Simpson, Age: 9

Popped off Name: Lisa Simpson, Age: 9

First person is: Name: Marge Simpson, Age: 45

Popped off Name: Marge Simpson, Age: 45

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 = new;

  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;

      }

Перейти на страницу:

Похожие книги

Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Нил Форд , Билл де Ора , Майкл Хайгард

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT