Мое почтение, джентльмены.
Появился следующий функционал, делюсь.
Функции:
1.Array2Dto1D() - быстрое преобразования двухмерного массива в одномерный (данные не обрезаются, 2е измерение преобразуются в очередь) (v1.0.5.0 и выше)
Параметры метода:
1.array_in_out - массив, который нужно преобразовать
2.lLbound1 - нижняя граница нового массива (по умолчанию=0)
2.Array1Dto2D() - быстрое преобразование одномерного массива в двухмерный (данные не удаляются) (v1.0.5.0 и выше)
Параметры метода:
1.array_in_out - массив, который нужно преобразовать
2.lLbound1 - нижняя граница нового массива, 1е измерение (по умолчанию=0)
3.lLbound2 - нижняя граница нового массива, 2е измерение (по умолчанию=0)
4.cElements1 [/B ] - размер, первой размерности - кол-во столбцов (по умолчанию=1). Вторая рассчитывается автоматически (начиная с v2.0.0.2).
Размер для размерности должен задаваться так, что бы общее количество элементов массива было кратно задаваемому размеру
Использование:
Результат:
Преобразование массива из [B]1 млн строк из двухмерного в одномерный и наоборот 1 млн. раз = 0,1210938 sec.
начиная с v2.0.0.2
Появился следующий функционал, делюсь.
Функции:
1.Array2Dto1D() - быстрое преобразования двухмерного массива в одномерный (данные не обрезаются, 2е измерение преобразуются в очередь) (v1.0.5.0 и выше)
Параметры метода:
1.array_in_out - массив, который нужно преобразовать
2.lLbound1 - нижняя граница нового массива (по умолчанию=0)
2.Array1Dto2D() - быстрое преобразование одномерного массива в двухмерный (данные не удаляются) (v1.0.5.0 и выше)
Параметры метода:
1.array_in_out - массив, который нужно преобразовать
2.lLbound1 - нижняя граница нового массива, 1е измерение (по умолчанию=0)
3.lLbound2 - нижняя граница нового массива, 2е измерение (по умолчанию=0)
4.cElements1 [/B ] - размер, первой размерности - кол-во столбцов (по умолчанию=1). Вторая рассчитывается автоматически (начиная с v2.0.0.2).
Размер для размерности должен задаваться так, что бы общее количество элементов массива было кратно задаваемому размеру
Использование:
| Код |
|---|
Sub TestArrayDtoD() Dim r As BedvitCOM.VBA: Set r = New BedvitCOM.VBA 'раннее связывание Dim t, arr, i arr = [a1:a1000000] t = Timer For i = 1 To 1000000 r.Array2Dto1D arr 'в одномерный (нижняя граница = 0 - по умолчанию) r.Array1Dto2D arr, 1, 1 'в двухмерный с 1м столбцом, нижние границы измерений = 1 Next Debug.Print "bVBA.ReDimArray: " & Timer - t & " sec." End Sub |
Результат:
Преобразование массива из [B]1 млн строк из двухмерного в одномерный и наоборот 1 млн. раз = 0,1210938 sec.
начиная с v2.0.0.2
| Код |
|---|
Sub TestArrayDtoD_()
'Dim bVBA As New BedvitCOM.VBA 'раннее связывание
Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание
Dim arr
arr = [a1:b10] ' забираем массив 2 столбца, 10 строк
bVBA.Array2Dto1D arr 'в одномерный (нижняя граница = 0 - по умолчанию)
bVBA.Array1Dto2D arr, 1, 1, 10 'преобразуем в двухмерный с 10ю столбцами и 2 строками, нижние границы измерений = 1, порядок данных сохраняется исходный
Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr 'нового размера массив со старым порядком данных
End Sub |
Изменено: - 29.08.2022 14:03:24
«Бритва Оккама» или «Принцип Калашникова»?