Изменить размер массива внутри массива - PullRequest
0 голосов
/ 09 октября 2019

У меня есть словарь VBA с парами ключ: значение. Ключом является имя животного, а значением является массив массивов, который выглядит следующим образом: [[килограмм съедено], [килограмм получено]]. Я пытаюсь изменить размеры внутренних массивов, чтобы я мог добавлять элементы в эти массивы с помощью цикла. Документация указывает, что «Чтобы изменить размер массива, содержащегося в Variant, вы должны явно объявить переменную Variant, прежде чем пытаться изменить размер ее массива». Я сделал это ранее в коде, но у меня все еще есть синтаксическая ошибка.

            With animalDict
                'Check if the animal is already in the dict
                'If not, create a key:value entry that is equal to (animal name):[[kilos eaten],[kilos gained]]
                If Not .Exists(animalName) Then
                    ReDim kilosEatenArr(0)
                    ReDim kilosGainedArr(0)
                    ReDim outerArr(1)
                    kilosEatenArr(0) = kilosEatenCount
                    kilosGainedArr(0) = kilosGainedCount
                    outerArr(0) = kilosEatenArr
                    outerArr(1) = kilosGainedArr
                    .Add Key:=animalName, Item:=outerArr
                Else
                    outerArr = .Item(animalName)
                    ReDim Preserve outerArr(0)(LBound(outerArr(0)) To UBound(outerArr(0)) + 1) 'Sytnax error here
                    ReDim Preserve outerArr(1)(LBound(outerArr(1)) To UBound(outerArr(1)) + 1) 'Another sytnax error here
                    kilosEatenArr(UBound(kilosEatenArr)) = kilosEatenCount
                    kilosGainedArr(UBound(kilosGainedArr)) = kilosGainedCount
                    outerArr(0) = kilosEatenArr
                    outerArr(1) = kilosGainedArr
                    animalDict(animalName) = outerArr
                End If
            End With

1 Ответ

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

@ Warcupine правильно. Вы должны вытащить массив из словаря, повторить его, установить значение для этого индекса и затем добавить его обратно в словарь.

Я не проверял это, но оно должно работать:

If Not .Exists(animalName) Then
    ReDim kilosEatenArr(0)
    ReDim kilosGainedArr(0)

    kilosEatenArr(0) = kilosEatenCount
    kilosGainedArr(0) = kilosGainedCount

    outerArr = Array(kilosEatenArr(0),kilosGainedArr(0))

    animalDict(animalName) = outerArr   'implict adds are faster

Else 

    outerArr = animalDict(animalName)

    kilosEatenArr = outerArr(0)
    kilosGainedArr = outerArr(1)

    ReDim Preserve kilosEatenArr(LBound(kilosEatenArr) To UBound(kilosEatenArr) + 1)    
    ReDim Preserve kilosGainedArr(LBound(kilosGainedArr) To UBound(kilosGainedArr) + 1)

    kilosEatenArr(UBound(kilosEatenArr)) = kilosEatenCount
    kilosGainedArr(UBound(kilosGainedArr)) = kilosGainedCount

    outerArr = Array(kilosEatenArr, kilosGainedArr)

    animalDict(animalName) = outerArr

End If 


Erase outerArr
Erase kilosEatenArr
Erase kilosGainedArr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...