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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 203 204 205 206 207 208 209 210 211 ... 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&lt;T&gt; полезен тем, что при вставке или удалении элементов он автоматически обеспечивает сортировку элементов в наборе. Однако классу SortedSet&lt;T&gt; необходимо сообщить, каким образом должны сортироваться объекты, путем передачи его конструктору в качестве аргумента объекта, который реализует обобщенный интерфейс IComparer&lt;T&gt;.

Начните с создания нового класса по имени SortPeopleByAge, реализующего интерфейс IComparer&lt;T&gt;, где Т — тип Person. Вспомните, что в этом интерфейсе определен единственный метод по имени Compare(), в котором можно запрограммировать логику сравнения элементов. Вот простая реализация:

using System.Collections.Generic;

namespace FunWithGenericCollections

{

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

  class SortPeopleByAge : IComparer&lt;Person&gt;

  {

    public int Compare(Person firstPerson, Person secondPerson)

    {

      if (firstPerson?.Age &gt; secondPerson?.Age)

      {

          return 1;

      }

      if (firstPerson?.Age &lt; secondPerson?.Age)

      {

        return -1;

      }

      return 0;

    }

  }

}

Теперь добавьте в класс Program следующий новый метод, который позволит продемонстрировать применение SortedSet&lt;Person&gt;:

static void UseSortedSet()

{

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

<b>  // Создать несколько объектов Person с разными значениями возраста.</b>

  SortedSet&lt;Person&gt; setOfPeople = new SortedSet&lt;Person&gt;(new SortPeopleByAge())

  {

    new Person {FirstName= &quot;Homer&quot;, LastName=&quot;Simpson&quot;, Age=47},

    new Person {FirstName= &quot;Marge&quot;, LastName=&quot;Simpson&quot;, Age=45},

    new Person {FirstName= &quot;Lisa&quot;, LastName=&quot;Simpson&quot;, Age=9},

    new Person {FirstName= &quot;Bart&quot;, LastName=&quot;Simpson&quot;, Age=8}

  };

<b>  // Обратите внимание, что элементы отсортированы по возрасту.</b>

  foreach (Person p in setOfPeople)

  {

    Console.WriteLine(p);

  }

    Console.WriteLine();

<b>  // Добавить еще несколько объектов Person с разными значениями возраста.</b>

  setOfPeople.Add(new Person { FirstName = &quot;Saku&quot;, LastName = &quot;Jones&quot;, Age = 1 });

  setOfPeople.Add(new Person { FirstName = &quot;Mikko&quot;, LastName = &quot;Jones&quot;, Age = 32 });

<b>  // Элементы по-прежнему отсортированы по возрасту.</b>

  foreach (Person p in setOfPeople)

  {

    Console.WriteLine(p);

  }

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

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