public SortedDictionary.KeyCollection Keys { get; } -Получает коллекцию ключей
public SortedDictionary.ValueCollection Values { get; } - Получает коллекцию значений
Следует иметь в виду, что ключи и значения, содержащиеся в коллекции, доступны отдельными списками с помощью свойств Keys
и Values
. В коллекциях типа SortedDictionary.KeyCollection
и SortedDictionary.ValueCollection
реализуются как обобщенные, так и необобщенные формы интерфейсов ICollection
и IEnumerable
.
И наконец, в классе SortedDictionary
реализуется приведенный ниже индексатор, определенный в интерфейсе IDictionary
public TValue this[TKey key] { get; set; }
Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в данном случае в качестве индекса служит ключ элемента, а не сам индекс.
При перечислении коллекции типа SortedDictionary
из нее возвращаются пары "ключ-значение" в форме структуры KeyValuePair
Напомним, что в этой структуре определяются два следующих поля.
public TKey Key; public TValue Value;
В этих полях содержится ключ или значение соответствующего элемента коллекции. Как правило, структура KeyValuePair
не используется непосредственно, поскольку средства класса SortedDictionary
позволяют работать с ключами и значениями по отдельности. Но при перечислении коллекции типа SortedDictionary
, например в цикле foreach
, перечисляемыми объектами являются пары типа KeyValuePair
.
Все ключи в коллекции типа SortedDictionary
должны быть уникальными, причем ключ не должен изменяться до тех пор, пока он служит в качестве ключа. В то же время значения не обязательно должны быть уникальными.
В приведенном ниже примере демонстрируется применение класса SortedDictionary
Это измененный вариант предыдущего примера, демонстрировавшего применение класса Dictionary
В данном варианте база данных работников отсортирована по фамилии и имени работника, которые служат в качестве ключа.
// Продемонстрировать применение класса обобщенной
// коллекции SortedDictionary
using System;
using System.Collections.Generic;
class GenSortedDictionaryDemo {
static void Main() {
// Создать словарь для хранения имен и фамилий
// работников и их зарплаты.
SortedDictionary diet =
new SortedDictionary();
// Добавить элементы в коллекцию,
diet.Add("Батлер, Джон", 73000);
diet.Add("Шварц, Capa", 59000);
diet.Add("Пайк, Томас", 45000);
diet.Add("Фрэнк, Эд", 99000);
// Получить коллекцию ключей, т.е. фамилий и имен.
ICollection с = 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
Как видите, список работников и их зарплаты отсортированы по ключу, в качестве которого в данном случае служит фамилия и имя работника.
Класс SortedList
В коллекции класса SortedList
хранится отсортированный список пар "ключ-значение". Это обобщенный эквивалент класса необобщенной коллекции SortedList
. В классе SortedList
реализуются интерфейсы IDictionary, IDictionary, ICollection, ICollection>, IEnumerable
и IEnumerable>
. Размер коллекции типа SortedList
изменяется динамически, автоматически увеличиваясь по мере необходимости. Класс SortedList
подобен классу SortedDictionary
, но у него другие рабочие характеристики. В частности, класс SortedList
использует меньше памяти, тогда как класс SortedDictionary
позволяет быстрее вставлять неупорядоченные элементы в коллекцию.
В классе SortedListcTKey, TValue>
предоставляется немало конструкторов. Ниже перечислены наиболее часто используемые конструкторы этого класса.
public SortedList()
public SortedList(IDictionaryCTKey, TValue> dictionary)
public SortedList(int capacity)
public SortedList(IComparer comparer)
В первой форме конструктора создается пустой список с выбираемой по умолчанию первоначальной емкостью. Во второй форме конструктора создается отсортированный список с указанным количеством элементов dictionary. В третьей форме конструктора с помощью параметра capacity задается емкость коллекции, создаваемой в виде отсортированного списка. Если размер списка заранее известен, то, указав емкость создаваемой коллекции, можно исключить изменение размера списка во время выполнения, что, как правило, требует дополнительных затрат вычислительных ресурсов. И в четвертой форме конструктора допускается указывать с помощью параметра comparer способ сравнения объектов, содержащихся в списке.
Читать дальше