На этом шаге мы рассмотрим создание и особенности использования ассоциативных коллекций.
Существует еще один примечательный тип коллекций, которые иногда называют ассоциативными. В такой коллекции доступ к элементу выполняется по ключу. Ключ - это некоторое значение (не обязательно целочисленное), которое играет роль индекса. То есть элемент в коллекции сохраняется в виде пары ключ-значение.
Реализовать ассоциативную коллекцию можно, например, на основе класса Hashtable или класса SortedList. На основе класса Hashtable создается контейнер, в котором пары ключ-значение хранятся в виде хэш-таблицы (для кодирования и реализации значений разных типов используется специальный числовой код, или хэш-код). В коллекции, созданной на основе класса SortedList, пары ключ-значение хранятся в упорядоченном виде (упорядочивание выполняется по ключу). Небольшая иллюстрация к использованию классов Hashtable и SortedList представлена в примере ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace pr299_1 { // Главный класс: class Program { // Главный метод: static void Main() { // Создание коллекции: Hashtable ht = new Hashtable(); // Добавление элементов в коллекцию: ht.Add("первый", 100); ht.Add("второй", 200); ht["третий"] = 300; // Коллекция индексов: ICollection keys = ht.Keys; Console.WriteLine("Содержимое коллекции:"); // Содержимое коллекции: foreach(string s in keys) { Console.WriteLine("{0} -> {1}", s, ht[s]); } // Создание коллекции: SortedList sl = new SortedList(); // Добавление элементов в коллекцию: sl.Add("один", 1); sl.Add("два", 2); sl["три"] = 3; // Коллекция ключей: keys = sl.Keys; Console.WriteLine("Содержимое коллекции:"); // Содержимое коллекции: foreach (string s in keys) { Console.WriteLine("{0} -> {1}", s, sl[s]); } // Задержка: Console.ReadLine(); } } }
Ниже показано, каким будет результат выполнения программы:
Рис.1. Результат работы приложения
В этой программе создается две коллекции: одна на основе класса Hashtable (команда
Hashtable ht = new Hashtable();
SortedList sl = new SortedList();
У объектов коллекций есть свойства Keys и Values. Эти свойства результатом возвращают коллекции, соответственно, из ключей и значений элементов. Поэтому для получения коллекции ключей используем выражения ht.Keys и sl.Keys. Ссылки на коллекции ключей последовательно записываются в переменную keys, которая объявлена как относящаяся к интерфейсному типу ICollection. Перебирая ключи в коллекции ключей, получаем доступ к значениям элементов.
На следующем шаге мы подведем итог изученному материалу.