Объекты, хранящиеся в переменных Variant
Объекты могут храниться в переменных Variant. Это может быть полезно, когда вам нужно эффективно обрабатывать различные типы данных, включая объекты. Например, все элементы массива должны иметь один и тот же тип данных. Установите тип данных массива «Вариант», чтобы хранить объекты вместе с другими типами данных в одном массиве.
множество
Если у вас есть опыт программирования на других языках, вы должны быть знакомы с концепцией массивов. Благодаря массивам вы можете обращаться к ряду переменных с одинаковым именем и идентифицировать их численно (индексировать). Во многих ситуациях использование массивов может сократить и упростить программы, поскольку вы можете спроектировать цикл, используя значения индекса, для эффективной обработки нескольких ситуаций. Массивы имеют верхнюю и нижнюю границы, а элементы массива непрерывны в пределах верхней и нижней границ. Поскольку Visual Basic выделяет пространство для каждого значения индекса, не объявляйте массив нереально большого размера.
Обратите внимание, что массивы, обсуждаемые в этом разделе, представляют собой массивы переменных, объявленных в программе. Они отличаются от массивов элементов управления, которые указываются во время разработки путем установки свойства Index элемента управления. Массивы переменных всегда непрерывны; в отличие от управляющих массивов, элементы массива не могут быть загружены или выгружены из середины массива.
Все элементы массива имеют одинаковый тип данных. Конечно, когда тип данных Variant, каждый элемент может содержать разные типы данных (объекты, строки, значения и т. д.). Могут быть объявлены массивы любого базового типа данных, включая определяемые пользователем типы (см. «Создание собственных типов данных» в главе 8 «Повторное программирование») и объектные переменные (см. главу 9 «Программирование с использованием объектов»).
В Visual Basic существует два типа массивов: массивы фиксированного размера, которые всегда остаются одного и того же размера, и динамические массивы, размер которых может меняться во время выполнения. Динамические массивы подробно обсуждаются в разделе «Динамические массивы» далее в этой главе.
Объявить массив фиксированного размера
Существует три способа объявления массива фиксированного размера, и какой метод вы используете, зависит от допустимого диапазона, который должен иметь массив:
Чтобы создать общедоступный массив, объявите его, используя оператор Public в разделе объявлений модуля.
Чтобы создать массив на уровне модуля, объявите его с помощью инструкции PRivate в разделе объявлений модуля.
Создайте локальный массив и объявите его с помощью оператора Private в процессе.
Установите верхнюю и нижнюю границы
При объявлении массива за именем массива следует верхняя граница, заключенная в круглые скобки. Верхняя граница не должна выходить за диапазон типа данных Long (от -2 147 483 648 до 2 147 483 647). Например, следующее объявление массива может появиться в разделе объявлений модуля:
DimCounters(14)AsInteger '15 элементы.
DimSums(20)AsDouble '21 элементы.
Чтобы создать общедоступный массив, замените Dim на Public.
PublicCounters(14)AsInteger
PublicSums(20)AsDouble
В том же объявлении в процедуре используется Dim: DimCounters(14)AsIntegerDimSums(20)AsDouble Первое объявление создает массив из 15 элементов, проиндексированных от 0 до 14. Второе объявление создает массив из 21 элемента с индексом от 0 до 20. Нижняя граница по умолчанию равна 0.
Чтобы указать нижнюю границу, используйте ключевое слово To, чтобы указать явную нижнюю границу (для типа данных Long):
DimCounters(1To15)AsInteger
ДимСумс(100To120)AsString
В предыдущем операторе счетчики имеют индексные значения от 1 до 15, а суммы — от 100 до 120.
Массивы, содержащие другие массивы
Можно создавать массивы типов данных Variant и размещать их вместе с массивами разных типов данных. Следующий код создает два массива: один содержит целые числа, а другой — строки. Затем объявите третий массив Variant и поместите в него целочисленные и строковые массивы:
PrivateSubCommand1_Click()
DimintXAsInteger 'Объявляем переменную счетчика.
'Объявите и поместите массив целых чисел.
DimcountersA(5)AsInteger
ФоринтX=0To4
счетчикиA(intX)=5
СледующийintX
'Объявите и поместите массив строк.
Счетчики яркостиB(5)AsString
ФоринтX=0To4
countersB(intX)=привет
СледующийintX
DimarrX(2)AsVariant 'Объявляем новый массив с двумя элементами.
arrX(1)=countersA() 'Перемещаем другие массивы в массив.
arrX(2)=счетчикиB()
MsgBoxarrX(1)(2) 'Отображение каждого члена массива.
MsgBoxarrX(2)(3)
EndSub
многомерный массив
Иногда необходимо отслеживать соответствующую информацию в массиве. Например, чтобы отслеживать каждый пиксель на экране компьютера, вам необходимо указать его координаты X и Y. В настоящее время для хранения значений следует использовать многомерные массивы. Многомерные массивы можно объявлять с помощью Visual Basic. Например, следующий оператор объявляет внутри процедуры двумерный массив 10×10.
StaticMatrixA(9,9)AsDouble
Вы можете объявить одно или оба измерения с явной нижней границей:
StaticMatrixA(1To10,1To10)AsDouble
Все это можно обобщить на массивы более чем двух измерений. Например:
ДимМультиД(3,1To10,1To15)
Это объявление создает трехмерный массив размером 4×10×15. Общее количество элементов — это произведение трех измерений, равное 600.
Обратите внимание, что при увеличении размерности массива пространство, занимаемое массивом, значительно увеличится, поэтому многомерные массивы следует использовать с осторожностью. Будьте особенно осторожны при использовании массивов Variant, поскольку они требуют большего пространства для хранения.
Использование циклов для управления массивами
Вы можете использовать вложенные циклы For для эффективной обработки многомерных массивов. Например, в MatrixA каждому элементу присваивается значение в зависимости от его положения в массиве:
DimIAsInteger,JAsInteger
StaticMatrixA(1To10,1To10)AsDouble
ДляI=1To10
ДляJ=1To10
МатрицаA(I,J)=I*10 Дж
СледующийJ
СледующийI
Дополнительная информация. Дополнительные сведения о циклах см. в разделе «Структуры циклов» далее в этой главе.
динамический массив
Насколько большим должен быть массив, иногда неизвестно. Поэтому я надеюсь, что у меня будет возможность изменять размер массива во время выполнения.
Динамические массивы могут изменить размер в любое время. В Visual Basic динамические массивы являются наиболее гибкими и удобными, помогая эффективно управлять памятью. Например, вы можете использовать большой массив в течение короткого времени, а затем освободить пространство памяти для системы, когда массив не используется.
Если вы не используете динамический массив, объявите массив максимально возможного размера, а затем удалите ненужные элементы. Однако если этот метод используется чрезмерно, это приведет к замедлению работы операционной среды памяти.
Чтобы создать динамический массив, выполните следующие действия:
1. (Если вы хотите, чтобы массив был общедоступным массивом) объявите массив с помощью оператора Public или (если вы хотите, чтобы массив был уровнем модуля) объявите массив с помощью оператора Dim на уровне модуля. или (если вы хотите, чтобы массив был локальным массивом) в разделе Используйте оператор Static или Dim для объявления массива во время процедуры. Объявите массив как динамический, добавив к нему пустую таблицу измерений.
ДимДинАррай()
2. Используйте оператор ReDim, чтобы выделить фактическое количество элементов.
Редимдинаррай (х 1)
Операторы ReDim могут появляться только внутри процедур. В отличие от оператора Dim и оператора Static, оператор ReDim является исполняемым оператором. Благодаря этому оператору приложение выполняет операцию во время выполнения. Инструкция ReDim поддерживает тот же синтаксис, что и для фиксированных массивов. Для каждого измерения каждый оператор ReDim может изменить количество элементов, а также верхнюю и нижнюю границы. Однако размеры массива изменить нельзя.
Редимдинаррай (от 4 до 12)
Например, используйте динамический массив Matrix1, созданный на уровне модуля впервые:
DimMatrix1()AsInteger
Затем выделите место для массива в процедуре:
Субкальквалуесноу()
.
.
.
РеДимМатрикс1(19,29)
EndSub
Здесь оператор ReDim выделяет целочисленную матрицу размером 20×30 для Matrix (общий размер элемента составляет 600). Есть еще один способ использования переменных для установки границ динамических массивов:
РедимМатрикс1(X,Y)
Обратите внимание, что вы можете присвоить строку массиву байтов переменного размера. Массив байтов также может быть присвоен строке переменной длины. Важно отметить, что количество байтов в строке зависит от платформы. Одна и та же строка имеет в два раза больше байтов на платформе Unicode, чем на платформе, не поддерживающей Unicode.
Сохранение содержимого динамического массива
Каждый раз, когда выполняется оператор ReDim, все значения, хранящиеся в данный момент в массиве, теряются. Visual Basic сбрасывает значение элемента массива на Empty (для массива Variant), на 0 (для числового массива), на строку нулевой длины (для массива String) или на Nothing (для массива объектов). .
Это полезно при подготовке массива для новых данных или когда вы хотите уменьшить размер массива для экономии памяти. Иногда вам нужно изменить размер массива, не теряя при этом данные в массиве. Это можно сделать с помощью оператора ReDim с ключевым словом Preserve. Например, использование функции UBound для ссылки на верхнюю границу приводит к расширению массива и добавлению элемента без потери значения существующего элемента:
ReDimPreserveDynArray(UBound(DynArray) 1)
При использовании ключевого слова Preserve вы можете изменить только верхнюю границу последнего измерения в многомерном массиве. Если вы измените нижнюю границу других измерений или последнего измерения, во время выполнения произойдет ошибка; Итак, это можно запрограммировать следующим образом:
ReDimPreserveMatrix(10,UBound(Matrix,2) 1)
Вместо такого программирования:
ReDimPreserveMatrix(UBound(Matrix,1) 1,10)
Более подробную информацию о динамических массивах см. в разделе «Функция ReDim» справочника по языку. Дополнительную информацию о массивах объектов см. в главе 9 «Программирование с использованием объектов».
->