Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Перераспределяет область хранения для переменной массива.
Синтаксис
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
Детали
| Термин | Определение |
|---|---|
Preserve |
Необязательно. Модификатор, используемый для сохранения данных в существующем массиве при изменении размера только последнего измерения. |
name |
Обязательный. Имя переменной массива. См. раздел Declared Element Names. |
boundlist |
Обязательный. Список границ для всех измерений переопределенного массива. |
Замечания
Для изменения размера одного или нескольких из уже объявленных измерений массива можно использовать оператор ReDim. Если у вас есть большой массив и некоторые из входящих в него элементов больше не требуются, ReDim позволяет освободить память, уменьшив размер массива. Если же массив требует дополнительных элементов, ReDim может их добавить.
Оператор ReDim предназначен только для массивов. Он не подходит для скалярных величин (переменных, содержащих единственное значение), коллекций или структур. Обратите внимание, что при объявлении переменной типа Array у оператора ReDim не будет достаточной информации о типе для создания нового массива.
Оператор ReDim можно использовать только на уровне процедуры. В связи с этим контекст объявления для переменной должен быть процедурой; он не может быть исходным файлом, пространством имен, интерфейсом, классом, структурой, модулем или блоком. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.
Правила
Несколько переменных. Можно изменить размер нескольких переменных массива в одной инструкции объявления и указать
nameboundlistчасти для каждой переменной. Переменные разделяются запятыми.Границы массива. Каждая запись в
boundlistможет указывать нижние и верхние границы этого измерения. Нижняя граница всегда 0 (ноль). Верхняя граница представляет собой наибольшее возможное значение индекса для этого измерения, но не длину измерения (она равна верхней границе плюс один). Индекс для каждого измерения может варьироваться от 0 до значения верхней границы.Число измерений в
boundlistдолжно совпадать с исходным числом измерений (рангом) массива.Типы данных. Оператор
ReDimне может изменить тип данных переменной массива или его элементов.Инициализация. Инструкция
ReDimне может предоставлять новые значения инициализации для элементов массива.Ранг. Оператор
ReDimне может изменить ранг (число измерений) массива.Изменение размера с помощью сохранения. При использовании
Preserveможно изменить размер только последнего измерения массива. Для всех остальных измерений необходимо указывать привязку существующего массива.Например, в одномерных массивах можно изменить это измерение и в то же время сохранить все содержимое массива, поскольку изменяется только одно, последнее, измерение. Если же массив имеет два или больше измерений, то с помощью оператора Preserve можно изменить только последнее измерение массива.
PreserveСвойства. Можно использовать в свойстве, в котором содержится
ReDimмассив значений.
Поведение
Замена массива.
ReDimосвобождает существующий массив и создает новый массив с тем же рангом. Новый массив заменяет освобожденный массив в переменной массива.Инициализация без сохранения. Если не указано
Preserve,ReDimинициализирует элементы нового массива с помощью значения по умолчанию для их типа данных.Инициализация с помощью preserve. При указании
PreserveVisual Basic копирует элементы из существующего массива в новый массив.
Пример
В приведенном ниже примере производится увеличение размера последнего измерения динамического массива без потери существующих данных, а затем уменьшение размера массива с частичной потерей данных. Кроме того, размер массива уменьшается до исходного значения и все элементы массива инициализируются повторно.
Class SampleCollection
' Define a local collection to store strings.
Private items As New List(Of String)
' Define a parameterized property (indexer) for the collection.
Default Public Property Item(ByVal index As Integer) As String
Get
' Return the item at the specified index.
If index >= 0 AndAlso index < items.Count Then
Return items(index)
Else
Return Nothing
End If
End Get
Set(ByVal value As String)
' Set the item at the specified index.
If index >= 0 AndAlso index < items.Count Then
items(index) = value
ElseIf index = items.Count Then
' Allow adding new items at the end.
items.Add(value)
End If
End Set
End Property
' Add a Count property for convenience.
Public ReadOnly Property Count As Integer
Get
Return items.Count
End Get
End Property
' Add method to add items.
Public Sub Add(ByVal item As String)
items.Add(item)
End Sub
End Class
Оператор Dim создает новый массив с тремя измерениями. Каждое измерение объявляется с границей 10, поэтому индекс массива для каждого измерения может варьироваться в диапазоне от 0 до 10. В приведенном ниже описании эти три измерения называются слоем, строкой и столбцом.
Первый оператор ReDim создает новый массив, который заменяет существующий массив в переменной intArray. Оператор ReDim копирует все элементы из существующего массива в новый массив. Кроме того, он добавляет по десять столбцов в конец каждой строки каждого слоя и инициализирует элементы в этих новых столбцах со значением 0 (значение параметра Integer, который является типом элемента массива, по умолчанию).
Второй оператор ReDim создает еще один массив и копирует в него все подходящие элементы. При этом в каждой строке каждого слоя теряются пять последних столбцов. Это не проблема, если данные столбцы вам больше не нужны. Уменьшение размера большого массива позволяет освободить память, которая больше не требуется.
Третий оператор ReDim создает еще один массив и удаляет еще пять столбцов в конце каждой строки каждого слоя. В данном случае он не копирует существующие элементы. Этот оператор возвращает массиву первоначальный размер. Поскольку оператор не включает модификатор Preserve, он приводит все элементы массива к исходным значениям по умолчанию.
Дополнительные примеры см. в разделе "Массивы".