SortedDictionary<TKey, TValue>.KeyCollectionи SortedDictionary<TKey, TValu*e>. ValueCollection реализуются как обобщенные, так и необобщенные формы интерфейсов ICollection и IEnumerable.
И наконец, в классе SortedDictionary<TKey, TValue> реализуется приведенный ниже индексатор, определенный в интерфейсе IDictionary<TKey, TValueX
public TValue this[TKey
Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в данном случае в качестве индекса служит ключ элемента, а не сам индекс.
При перечислении коллекции типа 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> предоставляется немало конструкторов. Ниже перечислены наиболее часто используемые конструкторы этого
