Язык программирования C#9 и платформа .NET5
Часть 206 из 642 Информация о книге
First Names: LisaFirst Names: BartВ классе
определено множество дополнительных членов, представляющих интерес, поэтому за полным их описанием обращайтесь в документацию. Давайте рассмотрим еще несколько обобщенных коллекций, в частностиList<T>,Stack<T>иQueue<T>, что должно способствовать лучшему пониманию основных вариантов хранения данных в приложении.SortedSet<T>Работа с классом Stack<T>
Класс
представляет коллекцию элементов, которая обслуживает элементы в стиле "последний вошел — первый вышел" (LIFO). Как и можно было ожидать, вStack<T>определены членыStack<T>иPush(), предназначенные для вставки и удаления элементов из стека. Приведенный ниже метод создает стек объектовPop():Personstatic void UseGenericStack(){Stack<Person> stackOfPeople = new();stackOfPeople.Push(new Person { FirstName = "Homer",LastName = "Simpson", Age = 47 });stackOfPeople.Push(new Person { FirstName = "Marge",LastName = "Simpson", Age = 45 });stackOfPeople.Push(new Person { FirstName = "Lisa",LastName = "Simpson", Age = 9 });<b> // Просмотреть верхний элемент, вытолкнуть его и просмотреть снова..</b>Console.WriteLine("First person is: {0}", stackOfPeople.Peek());Console.WriteLine("Popped off {0}", stackOfPeople.Pop());Console.WriteLine("\nFirst person is: {0}", stackOfPeople.Peek());Console.WriteLine("Popped off {0}", stackOfPeople.Pop());Console.WriteLine("\nFirst person item is: {0}", stackOfPeople.Peek());Console.WriteLine("Popped off {0}", stackOfPeople.Pop());try{Console.WriteLine("\nnFirst person is: {0}", stackOfPeople.Peek());Console.WriteLine("Popped off {0}", stackOfPeople.Pop());}catch (InvalidOperationException ex){Console.WriteLine("\nError! {0}", ex.Message); // Ошибка! Стек пуст}}В коде строится стек, который содержит информацию о трех лицах, добавленных в алфавитном порядке следования их имен:
,HomerиMarge. Заглядывая (посредством методаLisa) в стек, вы будете всегда видеть объект, находящийся на его вершине; следовательно, первый вызовРеек()возвращает третий объектРеек(). После серии вызововPersonиPop()стек, в конце концов, опустошается, после чего дополнительные вызовыPeek()иРеек()приводят к генерации системного исключения. Вот как выглядит вывод:Pop()***** Fun with Generic Collections *****First person is: Name: Lisa Simpson, Age: 9Popped off Name: Lisa Simpson, Age: 9First person is: Name: Marge Simpson, Age: 45Popped off Name: Marge Simpson, Age: 45First person item is: Name: Homer Simpson, Age: 47Popped off Name: Homer Simpson, Age: 47Error! Stack empty.Работа с классом Queue<T>
Очереди — это контейнеры, которые обеспечивают доступ к элементам в стиле "первый вошел — первый вышел" (FIFO). К сожалению, людям приходится сталкиваться с очередями практически ежедневно: в банке, в супермаркете, в кафе. Когда нужно смоделировать сценарий, в котором элементы обрабатываются в режиме FIFO, класс
подходит наилучшим образом. Дополнительно к функциональности, предоставляемой поддерживаемыми интерфейсами, вQueue<T>определены основные члены, перечисленные в табл. 10.6.QueueТеперь давайте посмотрим на описанные методы в работе. Можно снова задействовать класс
и построить объектPerson, эмулирующий очередь людей, которые ожидают заказанный кофе.Queue<T>static void UseGenericQueue(){// Создать очередь из трех человек.Queue<Person> 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);
