Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 202 203 204 205 206 207 208 209 210 ... 642

First Names: Lisa

First Names: Bart

В классе List<T> определено множество дополнительных членов, представляющих интерес, поэтому за полным их описанием обращайтесь в документацию. Давайте рассмотрим еще несколько обобщенных коллекций, в частности Stack<T>, Queue<T> и SortedSet<T>, что должно способствовать лучшему пониманию основных вариантов хранения данных в приложении.

Работа с классом Stack<T>

Класс Stack&lt;T&gt; представляет коллекцию элементов, которая обслуживает элементы в стиле "последний вошел — первый вышел" (LIFO). Как и можно было ожидать, в Stack&lt;T&gt; определены члены Push() и Pop(), предназначенные для вставки и удаления элементов из стека. Приведенный ниже метод создает стек объектов Person:

static void UseGenericStack()

{

  Stack&lt;Person&gt; stackOfPeople = new();

  stackOfPeople.Push(new Person { FirstName = &quot;Homer&quot;,

                                  LastName = &quot;Simpson&quot;, Age = 47 });

  stackOfPeople.Push(new Person { FirstName = &quot;Marge&quot;,

                                  LastName = &quot;Simpson&quot;, Age = 45 });

  stackOfPeople.Push(new Person { FirstName = &quot;Lisa&quot;,

                                  LastName = &quot;Simpson&quot;, Age = 9 });

<b>  // Просмотреть верхний элемент, вытолкнуть его и просмотреть снова..</b>

  Console.WriteLine(&quot;First person is: {0}&quot;, stackOfPeople.Peek());

  Console.WriteLine(&quot;Popped off {0}&quot;, stackOfPeople.Pop());

  Console.WriteLine(&quot;nFirst person is: {0}&quot;, stackOfPeople.Peek());

  Console.WriteLine(&quot;Popped off {0}&quot;, stackOfPeople.Pop());

  Console.WriteLine(&quot;nFirst person item is: {0}&quot;, stackOfPeople.Peek());

  Console.WriteLine(&quot;Popped off {0}&quot;, stackOfPeople.Pop());

  try

  {

    Console.WriteLine(&quot;nnFirst person is: {0}&quot;, stackOfPeople.Peek());

    Console.WriteLine(&quot;Popped off {0}&quot;, stackOfPeople.Pop());

  }

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

  catch (InvalidOperationException ex)

  {

    Console.WriteLine(&quot;nError! {0}&quot;, ex.Message);  // Ошибка! Стек пуст

  }

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

}

В коде строится стек, который содержит информацию о трех лицах, добавленных в алфавитном порядке следования их имен: Homer, Marge и Lisa. Заглядывая (посредством метода Реек()) в стек, вы будете всегда видеть объект, находящийся на его вершине; следовательно, первый вызов Реек() возвращает третий объект Person. После серии вызовов Pop() и Peek() стек, в конце концов, опустошается, после чего дополнительные вызовы Реек() и Pop() приводят к генерации системного исключения. Вот как выглядит вывод:

***** 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<T>

Очереди — это контейнеры, которые обеспечивают доступ к элементам в стиле "первый вошел — первый вышел" (FIFO). К сожалению, людям приходится сталкиваться с очередями практически ежедневно: в банке, в супермаркете, в кафе. Когда нужно смоделировать сценарий, в котором элементы обрабатываются в режиме FIFO, класс Queue&lt;T&gt; подходит наилучшим образом. Дополнительно к функциональности, предоставляемой поддерживаемыми интерфейсами, в Queue определены основные члены, перечисленные в табл. 10.6.

Теперь давайте посмотрим на описанные методы в работе. Можно снова задействовать класс Person и построить объект Queue&lt;T&gt;, эмулирующий очередь людей, которые ожидают заказанный кофе.

static void UseGenericQueue()

{

  // Создать очередь из трех человек.

  Queue&lt;Person&gt; peopleQ = new();

  peopleQ.Enqueue(new Person {FirstName= &quot;Homer&quot;, LastName=&quot;Simpson&quot;, Age=47});

  peopleQ.Enqueue(new Person {FirstName= &quot;Marge&quot;, LastName=&quot;Simpson&quot;, Age=45});

  peopleQ.Enqueue(new Person {FirstName= &quot;Lisa&quot;, LastName=&quot;Simpson&quot;, Age=9});

  // Заглянуть, кто первый в очереди.

  Console.WriteLine(&quot;{0} is first in line!&quot;, peopleQ.Peek().FirstName);

1 ... 202 203 204 205 206 207 208 209 210 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий