Класс коллекции, который реализует интерфейс IDictionary, предназначен для хранения пар ключ/значение. Для опроса элементов в такой коллекции используется интерфейс IDictionaryEnumerator, а не lEnumerator.
Класс IDictionaryEnumerator является производным от класса lEnumerator и дополнительно определяет "свои" три свойства. Первое объявляется так:
DictionaryEntry Entry { get; }
Два остальные свойства интерфейса IDictionaryEnumerator:
object Key { get; }
object Value { get; }
Свойство Entry с помощью перечислителя позволяет получить следующую пару ключ/значение в форме структуры типа DictionaryEntry.
Пример.
Hashtable ht = new Hashtable();
ht.Add ("Анатолий", "555-3456");
ht.Add ("Александр", "555-3452");
IDictionaryEnumerator etr = ht.GetEnumerator();
while (etr.MoveNext())
Console.WriteLine(etr.Entry.Key + ": " + etr.Entry.Value);
Структура DictionaryEntry
Коллекции, в которых хранятся пары ключ/значение, используют для их хранения объект типа DictionaryEntry.
В этой структуре определены следующие свойства:
public object Key { get; set; }
public object Value { get; set; }
Эти свойства используются для получения доступа к ключу или к соответствующему ему значению.
Объект типа DictionaryEntry можно создать с помощью следующего конструктора:
Public DictionaryEntry (object key, object value)
Здесь параметр key принимает ключ,
А параметр value — значение.
Интерфейс IComparer
Этот интерфейс можно использовать для задания способа сортировки элементов коллекции. В интерфейсе IComparer определен метод Compare(), который позволяет сравнивать два объекта:
Int Compare (object v1, object v2)
Метод Compare() возвращает положительное число, если значение v1>v2, отрицательное, если v1<v2, и нуль, если v1=v2.
Интерфейс IHashCodeProvider
Интерфейс IHashCodeProvider должен быть реализован коллекцией, если программисту необходимо определить собственную версию метода GetHashCode(). По умолчанию используется метод Object.GetHashCode().
КОЛЛЕКЦИИ
Классы коллекций общего назначения
Класс | Описание |
ArrayList | Динамический массив, т.е. массив который при необходимости может увеличивать свой размер. |
Hashtable | Хеш-таблица (словарь) для пар ключ/значение. |
Queue | Очередь, или список, действующий по принципу: первым прибыл — первым обслужен. |
SortedList | Отсортированный список пар ключ/значение. |
Stack | Стек, или список, действующий по принципу: первым прибыл — последним обслужен. |
Класс ArrayList
Класс ArrayList предназначен для поддержки динамических массивов, которые при необходимости могут увеличиваться или сокращаться.
Класс ArrayList реализует интерфейсы:
• ICollection,
• IList,
• lEnumerable,
• ICloneable.
// Демонстрация использования ArrayList-массива.
using System;
using System.Collections;
Class ArrayListDemp
{
public static void Main()
{
ArrayList al = new ArrayList(); // Создаем динамический массив.
// Добавляем элементы в динамический массив.
al.Add('C');
al.Add('A');
al.Add('E');
// Отображаем массив, используя индексацию.
for (int i = 0; i < al.Count; i++)
Console.Write(al[i] + " ");
al.Remove('A'); // Удаляем элемент
al[0] = 'Y'; // Изменяем элементы
al[1] = 'X';
al.Sort(); // Сортировка массива
foreach (char сh in al)
Console.Write(сh + " ");
Console.WriteLine("Индекс элемента 'Y' равен " +
al.BinarySearch('Y')); // поиск элемента
// Создаем обычный массив из динамического.
char[] ia = (char[])al.ToArray (typeof(char));
}
}
Класс Queue
Добавление элементов в очередь и удаление их из нее осуществляется по принципу "первым пришел — первым обслужен" (first-in, first-out— FIFO).
Очередь — это динамическая коллекция, которая при необходимости увеличивается, чтобы принять для хранения новые элементы.
Дата: 2019-02-02, просмотров: 263.