Основы C# Урок 66. Класс SortedList
Класс SortedList предназначен для создания коллекции, элементы которых располагаются сразу в отсортированном по ключу виде. Доступ к элементам SortedList мы можем осуществлять двумя способами - через ключ (как в IDictionary), так и через его номер (как в массивах, например. Но, в отличие от массивов, мы используем не квадратные скобки, а некоторый метод).
Класс SortedList реализует интерфейсы IDictionary и ICloneable и подобно другим классам коллекций расположен в пространстве имен System.Collections.
Рассмотрим работу с основнями методами и свойствами этого класса на примере:
static void Main(string[] args)
{
SortedList sl = new SortedList();
// Добавление элементов.
sl.Add("USA", "Washington");
sl.Add("France", "Paris");
sl.Add("Germany", "Berlin");
// Показ всех элементов.
ShowAll(sl);
// Показываем нулевой элемент (Paris).
Console.WriteLine("sl[0]: {0}", sl.GetByIndex(0));
sl.Add("Denmark", "Copenhagen");
// Показываем нулевой элемент (Copenhagen).
Console.WriteLine("sl[0]: {0}", sl.GetByIndex(0));
// Выясняем, существуют ли определенные ключ и значение.
if (sl.ContainsKey("France"))
Console.WriteLine("There is France key");
else
Console.WriteLine("There is no France key");
if (sl.ContainsValue("Copenhagen"))
Console.WriteLine("There is Copenhagen value");
else
Console.WriteLine("There is no Copenhagen value");
// Поиск индекса ключа и значения.
// -1 - если ничего не найдено.
int keyNum = sl.IndexOfKey("France");
Console.WriteLine("Index of France: {0}", keyNum);
int keyValue = sl.IndexOfValue("Lisbon");
Console.WriteLine("Index of Lisbon: {0}", keyValue);
// Удаление элемента по ключу.
Console.WriteLine("France will be removed.");
sl.Remove("France");
ShowAll(sl);
// Удаление элемента по номеру.
Console.WriteLine("2nd element will be removed.");
sl.RemoveAt(2);
ShowAll(sl);
// Получаем все ключи и все значения.
Console.WriteLine("Keys:");
foreach (string key in sl.Keys) {
Console.WriteLine(key);
}
Console.WriteLine("Values:");
foreach (string key in sl.Values)
{
Console.WriteLine(key);
}
// Удаляем все элементы.
sl.Clear();
ShowAll(sl);
}
// Метод для показа всех элементов и их количества.
static void ShowAll(SortedList sl) {
Console.WriteLine("Count: {0}", sl.Count);
foreach (DictionaryEntry d in sl) {
Console.WriteLine("Key: {0}, Value: {1}", d.Key, d.Value);
}
}
Использование методов должно быть понятно из комментариев. Отметим, что большая часть методов стандартизована и встречается у всех коллекций - так все они реализуют интерфейс IDictionary.
Обратите внимание, что при выводе содержимого нашего SortedList его элементы показываются упорядоченнными по возрастанию ключей. И это несмотря на то, что добавляли их в другом порядке. Т. е. класс SortedList сортирует свое содержимое по значению ключей автоматически. Что не удивительно, так как класс называется SortedList. То, что элементы меняют свой порядок по мере добаления / удаления элементов, видно из следующего фрагмента:
// Показываем нулевой элемент (Paris).
Console.WriteLine("sl[0]: {0}", sl.GetByIndex(0));
sl.Add("Denmark", "Copenhagen");
// Показываем нулевой элемент (Copenhagen).
Console.WriteLine("sl[0]: {0}", sl.GetByIndex(0));
Сначала у нас нулевой элемент был один, а после простого добавления еще одного элемента в наш SortedList нулевой элемент изменился.
Вообще говоря автоматическая сортировка в классе SortedList связана некоторыми накладными расходами. Это значит, что если вам сортировка нужна только пару раз, то, быть может, лучше использовать другой класс (например, написанный вами).
|