Коллекции

С помощью класса Collection можно создавать пользовательские коллекции объектов. Коллекция — это своего рода массив объектов, доступ к элементам которого осуществляется как по индексам, так и по ключам. Прежде чем использовать коллекцию необходимо создать экземпляр класса Collection:

Dim MyClasses As New Collection

Добавить объекты в коллекцию позволяет метод Add(). Формат метода:

MyClasses.Add Item[, Key][, Before][, After]

В параметре Item указывается ссылка на объект. Необязательный параметр Key задает уникальный ключ, с помощью которого можно будет получить доступ к объекту. Если ключ с указанным значением существует в коллекции, то возникает ошибка. Необязательный параметр Before позволяет указать индекс или ключ объекта в коллекции перед которым будет вставлен добавляемый объект. Необязательный параметр After позволяет указать индекс (нумерация начнается с 1) или ключ объекта в коллекции после которого будет вставлен добавляемый объект. Если параметры Before и After указаны одновременно, то возникает ошибка. Пример добавления объекта в коллекцию:

MyClasses.Add C1, "Item1"

Доступ к объекту в коллекции выполняется с помощью метода Item(). Формат метода:

<Элемент> = MyClasses.Item(<Индекс или ключ>)

Метод Item() используется по умолчанию, поэтому его можно опустить:

<Элемент> = MyClasses(<Индекс или ключ>)

Удалить объект из коллекции позволяет метод Remove(). Формат метода:

MyClasses.Remove <Индекс или ключ>

Получить количество объектов в коллекции позволяет свойство Count.

Пример работы с коллекцией приведен в листинге 10.6.

Листинг 10.6. Коллекции

' Содержимое модуля класса MyClass
Private x_ As Integer

Property Let X(n As Integer)
   x_ = n
End Property

Property Get X() As Integer
   X = x_
End Property

...
' Содержимое модуля Module1
Sub Тест()       ' Запускаем эту процедуру
   Dim MyClasses As New Collection
   Dim C1 As New MyClass, C2 As New MyClass
   Dim Item As Variant
   C1.X = 10
   C2.X = 55
   MyClasses.Add C1, "Item1"
   MyClasses.Add C2, "Item2"
   ' Доступ по индексу
   Debug.Print MyClasses(1).X             ' 10
   Debug.Print MyClasses(2).X             ' 55
   Debug.Print MyClasses.Item(1).X        ' 10
   Debug.Print MyClasses.Item(2).X        ' 55
   ' Доступ по ключу
  Debug.Print MyClasses("Item1").X       ' 10
   Debug.Print MyClasses("Item2").X       ' 55
   Debug.Print MyClasses.Item("Item1").X  ' 10
   Debug.Print MyClasses.Item("Item2").X  ' 55
   ' Перебор элементов коллекции
   For Each Item In MyClasses
      Debug.Print Item.X
   Next
   ' Количество элементов коллекции
   Debug.Print MyClasses.Count ' 2
   ' Удаление элемента по индексу
   MyClasses.Remove 1
   Debug.Print MyClasses.Count ' 1
   ' Удаление элемента по ключу
   MyClasses.Remove "Item2"
   Debug.Print MyClasses.Count ' 0
End Sub
Предыдущая статья Все статьи Следующая статья