Шаг 299.
Язык программирования C#. Начала.
Немного о разном. Знакомство с коллекциями (окончание)

    На этом шаге мы рассмотрим создание и особенности использования ассоциативных коллекций.

    Существует еще один примечательный тип коллекций, которые иногда называют ассоциативными. В такой коллекции доступ к элементу выполняется по ключу. Ключ - это некоторое значение (не обязательно целочисленное), которое играет роль индекса. То есть элемент в коллекции сохраняется в виде пары ключ-значение.

    Реализовать ассоциативную коллекцию можно, например, на основе класса 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 (команда
  SortedList sl = new SortedList();
). Для добавления элементов в коллекции используется метод Add(), первым аргументом которому передается ключ элемента, а вторым аргументом методу передается значение элемента. Также можно индексировать объект коллекции, указав в качестве индекса ключ элемента.

    У объектов коллекций есть свойства Keys и Values. Эти свойства результатом возвращают коллекции, соответственно, из ключей и значений элементов. Поэтому для получения коллекции ключей используем выражения ht.Keys и sl.Keys. Ссылки на коллекции ключей последовательно записываются в переменную keys, которая объявлена как относящаяся к интерфейсному типу ICollection. Перебирая ключи в коллекции ключей, получаем доступ к значениям элементов.


Обратите внимание, что в коллекции, созданной на основе класса SortedList, элементы сортируются по значениям ключей. Также стоит заметить, что классы коллекций, в том числе и классы Hashtable и SortedList, содержат всевозможные методы и свойства, с помощью которых решаются самые различные задачи, связанные с использованием коллекций.

    На следующем шаге мы подведем итог изученному материалу.




Предыдущий шаг Содержание Следующий шаг