Отправляет email-рассылки с помощью сервиса Sendsay

Финансы. Инструкция

  Все выпуски  

Уроки по C# и .NET. Основы. Класс SortedList


Уроки по C#. Рассылки сайта progs.biz
Выпуск № 97

Начало > C# > Основы > Урок 66

Ф. Балена, Дж. Димауро.
Современная практика программирования на Microsoft Visual Basic и Visual C#.
Ф. Балена, Дж. Димауро. Современная практика программирования на Microsoft Visual Basic и Visual C#
Заказать на Озоне
Подробнее

Полные версии уроков (с картинками): урок 66.

Основы 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 связана некоторыми накладными расходами. Это значит, что если вам сортировка нужна только пару раз, то, быть может, лучше использовать другой класс (например, написанный вами).

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz

PARKING.RU. Качественный виртуальный хостинг на платформе Windows®: поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый выделенный хостинг на платформе Windows®: производительные серверы, профессиональная поддержка, аренда ПО Microsoft®, безопасность, гарантии. http://www.parking.ru



В избранное