Тема: Как изменить размерность первого массива в двумерном массиве с сохранением данных?

Здравствуйте,
Вот пример, где не получается этого сделать:

Public Sub Тест_размерности_массива()
   Dim i As Integer
   Dim j As Integer
   Dim strArr() As String
   ReDim strArr(1, 2) As String
   For i = 0 To 1
      For j = 0 To 2
         strArr(i, j) = i + j
      Next
   Next
   'тут выдает ошибку
   ReDim Preserve strArr(2, 2) As Stringх
End Sub

Вот вариан перехода через временный массив:

Public Sub Тест_размерности_массива()
   Dim i As Integer
   Dim j As Integer
   Dim strArr() As String
   Dim strArrTemp() As String
   ReDim strArr(1, 2) As String
   For i = 0 To 1
      For j = 0 To 2
         strArr(i, j) = i + j
      Next
   Next
   'переопределяем массив через временный массив
   ReDim strArrTemp(2, 2) As String
   For i = 0 To 1
      For j = 0 To 2
         strArrTemp(i, j) = strArr(i, j)
      Next
   Next
   ReDim strArr(2, 2) As String
   'получаем нужный массив
   strArr = strArrTemp
End Sub

Но это как-то громоздко.
Может я леса в лесу не вижу) Подскажите!

Re: Как изменить размерность первого массива в двумерном массиве с сохранением данных?

Через ReDim Preserve можно менять только "последнюю" размерность массива

ReDim strArr(1, 2) As String
ReDim Preserve strArr(1, 3) As String

Re: Как изменить размерность первого массива в двумерном массиве с сохранением данных?

Это я усек. Только не понятно с чем это связано.

Re: Как изменить размерность первого массива в двумерном массиве с сохранением данных?

Vildar пишет:

Может я леса в лесу не вижу

Возможно, более симпатичным будет вариант, когда задаем размерность сразу по максимуму.

ReDim strArr(2, 2) As String

А при использовании массива просто проверяем наличие элементов на пустоту

If Len(strArr(2, 0)) > 0 Then...

Это я усек. Только не понятно с чем это связано.

Я где-то читал. что это ограничение связано с возможностью выделения памяти под элементы массива.

Re: Как изменить размерность первого массива в двумерном массиве с сохранением данных?

Цитата из Microsoft Visual Basic 6.0 Programmer's Guide:
При использовании ключевого слова Preserve можно изменять только верхнюю границу последней размерности многомерных массивов.

Re: Как изменить размерность первого массива в двумерном массиве с сохранением данных?

Выше я привел примеры для примера)
Конечно же размерность я заранее не знаю, и она меняется по ходу дела.
Допустим определю я максимум в 256. А на практике использоваться будут 3-4, остальные в пустоту, ведь не хорошо же)
LeonidSN, киньте ссылкой на этот гид, для общего развития)

Re: Как изменить размерность первого массива в двумерном массиве с сохранением данных?

Vildar (2008-10-01 13:20:51)
Книжечка эта у меня на бумаге. Существует ли электронный вариант не знаю. Выпущена издательством "БХВ - Санкт-Петербург"
А "для общего развития" по VB очень рекомендовал бы сайт:
http://www.vbstreets.ru/

Re: Как изменить размерность первого массива в двумерном массиве с сохранением данных?

Vildar пишет:

Допустим определю я максимум в 256. А на практике использоваться будут 3-4, остальные в пустоту, ведь не хорошо же

Это хорошо. Потому что Вы один раз выделили память и компьютер больше не тратит времени на ее перераспределение в отличие от ReDim. На практике мне не приходилось сталкиваться, но теоретически, при большом (или огромном) количестве вычислений постоянный ReDim - это тормоз.

Re: Как изменить размерность первого массива в двумерном массиве с сохранением данных?

> brigval
постоянный ReDim — это тормоз.

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