0

だから私は配列の配列を作成したいのですが、収集したものから、ギザギザの配列が必要です。

整数の正方 nxn 行列を定義する配列 x(i,j) があります。k の反復ごとに、この配列内の 2 つの整数値が交換され、行列 x(i,j) の改善が試行されます。k の反復ごとに、この行列 x(i,j) を格納する配列を作成する必要があります。

明確にするために、私が持っているかどうか言ってください

1  2  3
4  5  6
7  8  9

そして、配列内の 2 つの要素を交換する反復を実行します。

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 のスクリーンショット

最後の繰り返しの後、 3 つの項目 (ループarrContainerごとに 0 から 2) が含まれていることを確認できます。For i to itLimit内部の各配列arrContainerは、上記の繰り返しで作成された配列の 1 つと同じです。

すべての反復後の配列の 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 に答える