所以我想创建一个数组数组,从我收集的数据中,我需要一个锯齿状数组。
我有一个数组x(i,j),它定义了一个整数的正方形nxn矩阵。对于k的每次迭代,交换该数组内的两个整数值以尝试并更好地使用矩阵x(i,j)。我需要创建一个数组,在每次k次迭代后存储这个矩阵x(i,j)。
澄清,如果我有
1 2 3
4 5 6
7 8 9
我执行迭代交换数组中的两个元素:
7 2 3
4 5 6
1 8 9
我希望能够将这些数组存储在数组中,以便随时调用。我在这里尝试了一个解决方案:
Dim y() As Variant 'Declare as a variant to contain arrays
ReDim y(1 To IterationLimit) 'This will be the jagged array
For k = 1 To IterationLimit
'Some code goes here for the swap
y(k) = x(i,j)
next k
现在说我想要第85次迭代。我希望能够输入y(85)[或类似]来拉出特定时间的矩阵x(i,j)。
希望我已经解释得这么好了。任何帮助表示赞赏,我真的很感激。
编辑:已删除的代码
答案 0 :(得分:5)
行。我想你可能根本就没有正确地将数组分配给y
。正如我在评论中提到的那样:
y(k) = x(i,j)
仅在x
数组中存储由i / j坐标表示的值。
为了让y(k)
在那时引用整个数组x
,您可以这样做:
y(k) = x
如果仍然无法运作,那么其他可能不正确。这是一个例子,我有一个名为baseArray
的2x2(基数0)数组,我明确地填充了一些值。我从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"'
最后使用VBE Locals窗口查看y
: