Возвращается только первый элемент в двумерном массиве - неправильное использование ReDim? - PullRequest
0 голосов
/ 23 октября 2019

У меня есть двумерный массив:

Dim twod_array() As Variant

, который я хочу сохранить значения из двух других массивов: например:

Dim arrayone As Variant
arrayone = (1, 2, 3)
Dim arraytwo As Variant
arraytwo = (4, 5, 6)

Я хочу циклически просмотреть каждый элемент вышемассивы и добавьте их следующим образом:

Dim count As Long
count = 0
ReDim Preserve twod_array(1,0) // initial sizing
for i = 0 To UBound(arrayone)
    for j = 0 To UBound(arraytwo)
        twod_array(0,count) = arrayone(i) 
        twod_array(1,count) = arraytwo(j)
        count = count + 1
        ReDim Preserve twod_array(1, count) // dynamic resizing (doesnt work)
    Next j
Next i

Я знаю, что в какой-то момент я должен переопределить 2D-массив, который, я полагаю, я могу сделать следующим образом:

ReDim Preserve twod_array(1, count)

1позволяет мне указать 2 элемента в x-измерении, и счет увеличивается, потому что я не знаю, сколько элементов будет в каждом массиве one-d (я просто установил их равными трем в этом примере)

По какой-то причине я могу только вывести значения twod_array (0,0) в twod_array (1,0), а остальные значения не заданы. Я подозреваю, что это связано с тем, как я использовал ReDim

например, сейчас я получаю только:

twod_array(0,0) = 1
twod_array(1,0) = 4

, но не:

twod_array(0,1) = 1
twod_array(1,1) = 5

вместо этого я получаю:

twod_array(0,1) = //blank
twod_array(1,1) = //blank

Может кто-нибудь помочь мне понять, почему мой код неправильно изменяет размеры 2D-массива, чтобы я мог выводить все элементы, которые он собирает?

1 Ответ

0 голосов
/ 23 октября 2019

возможно, вы после этого:

Option Explicit

Sub arrays()

    Dim arrayOne As Variant, arrayTwo As Variant
    arrayOne = Array(1, 2, 3)
    arrayTwo = Array(4, 5, 6)

    Dim i As Long
    ReDim twod_array(1, UBound(arrayOne)) As Variant ' array sizing
    For i = 0 To UBound(arrayOne)
        twod_array(0, i) = arrayOne(i)
        twod_array(1, i) = arrayTwo(i)
    Next

End Sub

, который выводит желаемый результат:

twod_array(0,0) = 1
twod_array(1,0) = 4

и

twod_array(0,1) = 2
twod_array(1,1) = 5
...