vb6: изменение размеров двумерного динамического массива - PullRequest
3 голосов
/ 08 июня 2011

Я использую массивы для хранения свойств пара в соответствии с его давлением.Прямо сейчас у меня есть свойства ровно 9 давлений, поэтому я использую статический массив.Я хотел бы быть более гибким, поэтому я бы хотел переключиться на динамические массивы.

Когда я использую ReDim foo(1 to i, 1 to 10) в цикле, я полностью теряю все данные, кроме последней строки.
Когда я использую ReDim Preserve foo(1 to i, 1 to 10) или ReDim Preserve(i,10) Программа выдает ошибку «Ошибка времени выполнения« 9 »: индекс вне диапазона» .i изменяется от 1 до 9.

Как добавить строку / столбец в массив, полный данных, не теряя их?

1 Ответ

6 голосов
/ 08 июня 2011

Вы можете только Redim Сохранить размер final в многомерном массиве VB6.Вот информация из MSDN:

Если вы включите ключевое слово Preserve, Visual Basic скопирует элементы из существующего массива в новый массив.Когда вы используете Preserve, вы можете изменить размер только последнего измерения массива, а для каждого другого измерения вы должны указать тот же размер, который он уже имеет в существующем массиве.

Например, если в вашем массиве есть только одинизмерение, вы можете изменить размер этого измерения и сохранить содержимое массива, потому что это последнее и единственное измерение.Однако, если ваш массив имеет два или более измерений, вы можете изменить размер только последнего измерения, если используете Preserve.

В следующем примере увеличивается размер последнего измерения динамического массива без потери существующихданные в массиве, а затем уменьшает размер с частичной потерей данных:

 Dim IntArray(10, 10, 10) As Integer 
 ReDim Preserve IntArray(10, 10, 20) 
 ReDim Preserve IntArray(10, 10, 15)
...