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

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

<b>public SortedDictionary()</b>

<b>public SortedDictionary(IDictionary&lt;TKey, TValue&gt; dictionary)</b>

<b>public SortedDictionary(IComparer&lt;TKey&gt; comparer)</b>

<b>public SortedDictionary(IDictionaryCTKey, TValue&gt; dictionary,</b>

<b>                   IComparer&lt;TKey&gt; comparer)</b>

В первом конструкторе создается пустой словарь, во втором конструкторе — словарь с указанным количеством элементов dictionary. В третьем конструкторе допускается указывать с помощью параметра comparer типа IComparer способ сравнения, используемый для сортировки, а в четвертом конструкторе — инициализировать словарь, помимо указания способа сравнения.

В классе SortedDictionary&lt;TKey, TValue&gt; определен ряд методов. Некоторые наиболее часто используемые методы этого класса сведены в табл. 25.18.

Таблица 25.18. Наиболее часто используемые методы, определенные в классе SortedDictionaryCTKey, TValue>

Метод - Описание

public void Add (TKey key,  TValue value) -

Добавляет в словарь пару “ключ-значение", определяемую параметрами key и value. Если ключ key уже находится в словаре, то его значение не изменяется, и генерируется исключение ArgumentException

public bool ContainsKey (TKey кеу) - Возвращает логическое значение true, если вызывающий словарь содержит объект key в качестве ключа; в противном случае — логическое значение false

public bool ContainsValue(TValue value) public bool Remove(TKey key) - Возвращает логическое значение true, если вызывающий словарь содержит значение value; в противном случае — логическое значение false Удаляет ключ key из словаря. При удачном исходе операции возвращается логическое значение true, а если ключ key отсутствует в словаре — логическое значение false

Кроме того, в классе SortedDictionary<TKey, TValue> определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже.

Свойство - Описание

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

public SortedDictionary<TKey, TValue>.KeyCollection Keys { get; } - Получает коллекцию ключей

public SortedDictionary<TKey, TValue>.ValueCollection Values { get; } - Получает коллекцию значений

Следует иметь в виду, что ключи и значения, содержащиеся в коллекции, доступны отдельными списками с помощью свойств Keys и Values. В коллекциях типа SortedDictionary&lt;TKey, TValue&gt;.KeyCollection и SortedDictionary&lt;TKey, TValu*e&gt;.ValueCollection реализуются как обобщенные, так и необобщенные формы интерфейсов ICollection и IEnumerable.

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

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

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

При перечислении коллекции типа SortedDictionary&lt;TKey, TValue&gt; из нее возвращаются пары "ключ-значение" в форме структуры KeyValuePair&lt;TKey, TValue&gt; Напомним, что в этой структуре определяются два следующих поля.

<b>public TKey Key; public TValue Value;</b>

В этих полях содержится ключ или значение соответствующего элемента коллекции. Как правило, структура KeyValuePair&lt;TKey, TValue&gt; не используется непосредственно, поскольку средства класса SortedDictionary&lt;TKey, TValue&gt; позволяют работать с ключами и значениями по отдельности. Но при перечислении коллекции типа SortedDictionary&lt;TKey, TValue&gt;, например в цикле foreach, перечисляемыми объектами являются пары типа KeyValuePair.

Все ключи в коллекции типа SortedDictionary&lt;TKey, TValue&gt; должны быть уникальными, причем ключ не должен изменяться до тех пор, пока он служит в качестве ключа. В то же время значения не обязательно должны быть уникальными.

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

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

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

<b>using System;</b>

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

<b>class GenSortedDictionaryDemo {</b>

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

<b>    // Создать словарь для хранения имен и фамилий</b>

<b>    // работников и их зарплаты.</b>

<b>    SortedDictionary&lt;string, double&gt; diet =</b>

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

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

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

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

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