VBA中的锯齿状阵列

时间:2013-04-27 11:56:41

标签: vba excel-vba jagged-arrays excel

所以我想创建一个数组数组,从我收集的数据中,我需要一个锯齿状数组。

我有一个数组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)。

希望我已经解释得这么好了。任何帮助表示赞赏,我真的很感激。

编辑:已删除的代码

1 个答案:

答案 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.

Screenshot after the first iteration

检查arrContainer变量,我们看到它只有1个项目,该项目是一个等于我们在迭代中创建的tmpArray的数组。

Screenshot of arrContainer after the first iteration

在最后一次迭代之后,我们可以查看arrContainer并查看它包含3个项目(0到2,每个For i to itLimit循环)。 arrContainer内的每个数组都等于上面迭代中创建的一个数组。

Screenshot of arrContainer array of arrays after all iterations

我们现在可以参考这些项目,例如:

Dim y as Variant y = arrContainer(2) '# or any in bounds index could be used instead of "2"'

最后使用VBE Locals窗口查看y

Final screenshot referring to a single array item within arrContainer