OK. Я думаю, вы можете просто не назначать массивы y
правильно. Как я уже говорил в комментариях:
y(k) = x(i,j)
является ТОЛЬКО хранить значение, представленное I/J, координаты в x
массиве.
Для того, чтобы y(k)
сослаться на весь массив x
в то время, вы могли бы сделать:
y(k) = x
Если это все еще не работает, то, возможно, что-то еще неправильно. Вот пример, когда у меня есть массив 2x2 (base 0), который называется baseArray
, который я явно заполняю некоторыми значениями. Я повторяю от i = 0 to itLimit
, и в каждой итерации я перебираю элементы в массиве, умножая значения на 2 и сохраняя в переменной массива tmpArray
. После того, как значения были преобразованы, я сохраняю их в arrContainer
и перехожу к следующей итерации For i = 0 to itLimit
.
Sub FunWithArrays()
Dim itLimit As Integer '## Iteration limit.'
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim baseArray(2, 2) As Variant '## an example array.'
'## Put some dummy data in this array.'
baseArray(0, 0) = 1
baseArray(0, 1) = 65
baseArray(0, 2) = 13
baseArray(1, 0) = 14
baseArray(1, 1) = 29
baseArray(1, 2) = 44
baseArray(2, 0) = 9
baseArray(2, 1) = 16
baseArray(2, 2) = 33
Dim tmpArray(2, 2) As Variant '## This will temporarily hold values as we transform them.'
Dim arrContainer() As Variant '## an array of arrays, to store the iteration arrays.'
itLimit = 2 '## set a max iteration.'
For i = 0 To itLimit
'## Transform the base array somehow'
For j = LBound(baseArray, 1) To UBound(baseArray, 1)
For k = LBound(baseArray, 2) To UBound(baseArray, 2)
tmpArray(j, k) = baseArray(j, k) * 2
Next
Next
ReDim Preserve arrContainer(i)
arrContainer(i) = tmpArray
Next
Dim y As Variant
'## Now, refer to a single iteration stored in the arrContainer variable:
y = arrContainer(2)
End Sub
В первом скриншоте, я использую Locals
окно для обзора переменных и то, что они содержат. После первой итерации, вы можете увидеть, что tmpArray
была заселена, и это те же размеры, как baseArray
, но значения в нем были умножены на 2.
Рассматривая переменную arrContainer
, мы видим, что это имеет только 1 элемент, и этот элемент представляет собой массив, равный tmpArray
, который мы создали на итерации выше.
После последней итерации, мы можем рассмотреть arrContainer
и увидеть, что она содержит 3 пунктов (от 0 до 2, в нашем For i to itLimit
цикле). Каждый массив внутри arrContainer
равен одному из массивов, созданных на итерации выше.
Теперь мы можем обратиться к этим пунктам, как:
Dim y as Variant
y = arrContainer(2) '# or any in bounds index could be used instead of "2"'
И, наконец, используя окно Locals VBE обзор y
:
когда вы говорите, что у вас есть массив 'x (i, j) 'do' i' и 'j' представляют границы этого массива? Или '' массив массивов, один из дочерних массивов которого определяется индексом '(i, j)'? –
i и j действительно представляют границы да. Итак, для приведенного выше примера я думаю, что это будет x (от 1 до 3, от 1 до 3). – Matt
Чтобы дать вам немного больше информации. Если бы я должен был ссылаться на x (2,2) из приведенной выше матрицы, это означало бы значение в вторая строка и второй столбец, т. е. 5. Не уверен, помогает ли это или нет. – Matt