Добавить в цитаты Настройки чтения

Страница 468 из 502

public IComparer<TK> Comparer { get; } - Получает метод сравнения для вызывающего списка

public IList<TK> Keys { get; } - Получает коллекцию ключей

public IList<TV> Values { get; } - Получает коллекцию значений

И наконец, в классе SortedList&lt;TKey, TValue&gt; реализуется приведенный ниже индексатор, определенный в интерфейсе IDictionaryCTKey, TValue&gt;

<b>public TValue this[TKey key] { get; set; }</b>

Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в данном случае в качестве индекса служит ключ элемента, а не сам индекс.

В приведенном ниже примере демонстрируется применение класса SortedList&lt;TKey, TValue&gt; Это еще один измененный вариант представленного ранее примера базы данных работников. В данном варианте база данных хранится в коллекции типа SortedList.

<b>// Продемонстрировать применение класса обобщенной</b>

<b>// коллекции SortedList&lt;TKey, TValue&gt;.</b>

<b>using System;</b>

<b>using System.Collections.Generic;</b>

<b>class GenSLDemo {</b>

<b>  static void Main() {</b>

<b>    // Создать коллекцию в виде отсортированного списка</b>

<b>    // для хранения имен и фамилий работников и их зарплаты.</b>

<b>    SortedList&lt;string, double&gt; sl =</b>

<b>         new SortedList&lt;string, double&gt;();</b>

<b>    // Добавить элементы в коллекцию,</b>

<b>    sl.Add(&quot;Батлер, Джон&quot;, 73000);</b>

<b>    sl.Add(&quot;Шварц, Capa&quot;, 59000);</b>

<b>    sl.Add(&quot;Пайк, Томас&quot;, 45000);</b>

<b>    sl.Add(&quot;Фрэнк, Эд&quot;, 99000);</b>

<b>    // Получить коллекцию ключей, т.е. фамилий и имен.</b>

<b>    ICollection&lt;string&gt; с = sl.Keys;</b>

<b>    // Использовать ключи для получения значений, т.е. зарплаты,</b>

<b>    foreach(string str in с)</b>

<b>      Console.WriteLine(&quot;{0}, зарплата: {1:C}&quot;, str, sl[str]);</b>

<b>    Console.WriteLine();</b>

<b>  }</b>

<b>}</b>

Ниже приведен результат выполнения этой программы.

<b>Батлер, Джон, зарплата: $73,000.00</b>

<b>Пайк, Томас, зарплата: $45,000.00</b>

<b>Фрэнк, Эд, зарплата: $99,000.00</b>

<b>Шварц, Сара, зарплата: $59,000.00</b>

Как видите, список работников и их зарплаты отсортированы по ключу, в качестве которого в данном случае служит фамилия и имя работника.

Класс Stack&lt;T&gt; является обобщенным эквивалентом класса необобщенной коллекции Stack. В нем поддерживается стек в виде списка, действующего по принципу "первым пришел — последним обслужен". В этом классе реализуются интерфейсы Collection, IEnumerable и IEnumerable&lt;T&gt;. Кроме того, в классе Stack&lt;T&gt; непосредственно реализуются методы Clear(),Contains() и СоруТо(), определенные в интерфейсе ICollection&lt;T&gt;. А методы Add() и Remove() в этом классе не поддерживаются, как, впрочем, и свойство IsReadOnly. Коллекция класса Stack&lt;T&gt; имеет динамический характер, расширяясь по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться. В классе Stack&lt;T&gt; определяются следующие конструкторы.

<b>public Stack()</b>

<b>public Stack(int capacity)</b>

<b>public Stack(IEnumerable&lt;T&gt; collection)</b>

В первой форме конструктора создается пустой стек с выбираемой по умолчанию первоначальной емкостью, а во второй форме — пустой стек, первоначальный размер которого определяет параметр capacity. И в третьей форме создается стек, содержащий элементы коллекции, определяемой параметром collection. Его первоначальная емкость равна количеству указанных элементов.

В классе Stack&lt;T&gt; определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются, а также в интерфейсе ICollection&lt;T&gt;. Некоторые из наиболее часто используемых методов этого класса перечислены в табл.25.20. Как и в классе Stack, эти методы обычно применяются следующим образом. Для того чтобы поместить объект на вершине стека, вызывается метод Push(). А для того чтобы извлечь и удалить объект из вершины стека, вызывается метод Pop(). Если же объект требуется только извлечь, но не удалить из вершины стека, то вызывается метод Реек(). А если вызвать метод Pop() или Реек(), когда вызывающий стек пуст, то сгенерируется исключение InvalidOperationException.

Таблица 25.20. Методы, определенные в классе Stack<T>