0

所以我想创建一个数组数组,从我收集的内容来看,我需要一个锯齿状数组。

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

希望我已经很好地解释了这一点。任何帮助表示赞赏,我真的坚持这一点。

编辑:删除的代码

4

1 回答 1

5

好的。我认为您可能根本没有正确分配数组y。正如我在评论中提到的:

y(k) = x(i,j)仅将 i/j 坐标表示的存储在x数组中。

为了当时y(k)引用整个数组x,您将执行以下操作:

y(k) = x

如果仍然无法正常工作,那么可能还有其他不正确的地方。这是一个示例,其中我有一个名为 2x2(以 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的截图

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

所有迭代后数组的 arrContainer 数组的屏幕截图

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

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

最后使用 VBE Locals 窗口查看y

引用 arrContainer 中单个数组项的最终屏幕截图

于 2013-04-27T13:46:08.790 回答