progs.biz  
Начало>C#>Основы>Урок 66
C#
VB.NET
Visual C++.NET
ASP.NET
Visual C++ 6
WinAPI
C/C++
Delphi
C++ Builder
Java
SQL
PHP
DirectX
Visual Basic 6.0
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

Алексей Дубовцев Microsoft .NET. Наиболее полное руководство.
Алексей Дубовцев Microsoft .NET. Наиболее полное руководство.
Заказать на Озоне



Яндекс-цитирования

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

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


 
 
Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2008 сайт progs.biz
© 2002-2008 Игорь Алексеев