SortedDictionary<TKey, TValue>.KeyCollectionи SortedDictionary<TKey, TValu*e>. ValueCollection реализуются как обобщенные, так и необобщенные формы интерфейсов ICollection и IEnumerable.

И наконец, в классе SortedDictionary<TKey, TValue> реализуется приведенный ниже индексатор, определенный в интерфейсе IDictionary<TKey, TValueX

public TValue this[TKey key] { get; set; }

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

При перечислении коллекции типа SortedDictionary<TKey, TValue> из нее возвращаются пары 'ключ-значение' в форме структуры KeyValuePair<TKey, TValueX Напомним, что в этой структуре определяются два следующих поля.

public TKey Key; public TValue Value;

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

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

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

// Продемонстрировать применение класса обобщенной // коллекции SortedDictionary<TKey, TValueX

using System;

using System.Collections.Generic;

class GenSortedDictionaryDemo { static void Main() {

// Создать словарь для хранения имен и фамилий // работников и их зарплаты.

SortedDictionary<string, double> diet =

new SortedDictionary<string, double>();

// Добавить элементы в коллекцию, diet.Add('Батлер, Джон', 73000); diet.Add('Шварц, Capa', 59000); diet.Add('Пайк, Томас', 45000); diet.Add('Фрэнк, Эд', 99000);

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

ICollection<string> с = diet.Keys;

// Использовать ключи для получения значений, т.е. зарплаты, foreach(string str in с)

Console.WriteLine('{0}, зарплата: {1:C}', str, diet[str]);

}

}

Эта программа дает следующий результат.

Батлер, Джон, зарплата: $73,000.00 Пайк, Томас, зарплата: $45,000.00 Фрэнк, Эд, зарплата: $99,000.00 Шварц, Сара, зарплата: $59,000.00

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

Класс SortedListCTKey, TValue>

В коллекции класса SortedList<TKey, TValue> хранится отсортированный список пар 'ключ-значение'. Это обобщенный эквивалент класса необобщенной коллекции SortedList. В классе SortedList<TKey, TValue> реализуются интерфейсы IDictionary, IDictionary<TKey, TValue>, ICollection, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable и IEnumerable<KeyValuePair<TKey, TValue». Размер коллекции типа SortedList<TKey, TValue> изменяется динамически, автоматически увеличиваясь по мере необходимости. Класс SortedList<TKey, TValue> подобен классу SortedDictionary<TKey, TValue>, но у него другие рабочие характеристики. В частности, класс SortedListcTKey, TValue> использует меньше памяти, тогда как класс SortedDicti-onary<TKey, TValue> позволяет быстрее вставлять неупорядоченные элементы в коллекцию.

В классе SortedListcTKey, TValue> предоставляется немало конструкторов. Ниже перечислены наиболее часто используемые конструкторы этого

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату