Как добавить ArrayLists в ArrayList? - PullRequest
1 голос
/ 28 марта 2020

У меня есть область данных с переменным количеством строк и столбцов. Как кто-то может создать главного arraylist и временного arraylist, который может захватить все значения каждой строки и затем сохранить это в master arraylist и затем очистить временный arraylist? Я не знаю точно, сколько элементов будет go в основном или временном, и когда этот отчет будет запущен в другой день, число элементов, вероятно, будет другим, поэтому оно должно быть гибким.

Sub arrayListsInArrayList()

    Dim MasterArrayList As Object
    Dim tempArrayList As Object
    Dim rowIndexer As Integer, rowCounter As Integer
    Dim colIndexer As Integer, colCounter As Integer

    Set MasterArrayList = CreateObject("System.Collections.ArrayList")
    Set tempArrayList = CreateObject("System.Collections.ArrayList")

    rowCounter = Range("A1", Range("A1").End(xlDown)).Count
    colCounter = Range("A1", Range("A1").End(xlToRight)).Count

    For rowIndexer = 0 To rowCounter - 1

        tempArrayList.Clear

        For colIndexer = 0 To colCounter - 1
            tempArrayList.Add Range("A1").Offset(rowIndexer, colIndexer).Value
        Next colIndexer

        MasterArrayList.Add tempArrayList

    Next rowIndexer

End Sub

Этот код "работает", но так как одноименный tempArrayList добавляется так много раз, я получаю повторяющиеся элементы. Есть ли способ динамически назвать временный массив? ie tempArrayList1, 2, et c.?

1 Ответ

2 голосов
/ 28 марта 2020

Я думаю, что если просто добавить ArrayLists отдельных значений строки к общему родителю ArrayList и очистить tempArrayList между ними, вы можете использовать метод clone (это предотвращает потерю значений в parent при очистке temp). В приведенном ниже примере игнорируется искаженный источник, но вы можете использовать вспомогательные функции для определения последнего столбца в строке.

При условии, что с пустыми элементами все в порядке:

Option Explicit

Public Sub testList()
    Dim src(), r As Long, c As Long
    Dim tempList As Object, masterList As Object

    Set tempList = CreateObject("System.Collections.ArrayList")
    Set masterList = CreateObject("System.Collections.ArrayList")

    src = Range("A1:C3").Value

    For r = LBound(src, 1) To UBound(src, 1)

        For c = LBound(src, 2) To UBound(src, 2)

           tempList.Add src(r, c)

        Next

        masterList.Add tempList.Clone

        tempList.Clear

    Next

    Stop
End Sub

image

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