Есть несколько способов, не включая пользовательский объект COM или ActiveX
- ReDim Preserve
- Словарь, который может иметь строковые ключи и искать их
- ArrayList .Net Framework Class, который имеет много методов, включая: sort (forward, reverse, custom), вставка, удаление, binarysearch, equals, toArray и toString
С кодомниже я обнаружил, что Redim Preserve быстрее 54000, Dictionary быстрее всего с 54000 до 690000, а список Array List быстрее 690000. Я склонен использовать ArrayList для отправки из-за сортировки и преобразования массива.
user326639 предоставил FastArray, который является довольно быстрым.
Словари полезны для поиска значения и возврата индекса (т. е. имен полей) или для группировки и агрегирования (гистограммы, группировать и добавлять, группировать иобъединять строки, группировать и выдвигать вложенные массивы).При группировке по ключам установите CompareMode для регистра / чувствительности и проверьте свойство «exist» перед «add» -ing.
Redim не сэкономит много времени для одного массива, но это полезно для словарямассивов.
'pushtest.vbs
imax = 10000
value = "Testvalue"
s = imax & " of """ & value & """"
t0 = timer 'ArrayList Method
Set o = CreateObject("System.Collections.ArrayList")
For i = 0 To imax
o.Add value
Next
s = s & "[AList " & FormatNumber(timer - t0, 3, -1) & "]"
Set o = Nothing
t0 = timer 'ReDim Preserve Method
a = array()
For i = 0 To imax
ReDim Preserve a(UBound(a) + 1)
a(UBound(a)) = value
Next
s = s & "[ReDim " & FormatNumber(timer - t0, 3, -1) & "]"
Set a = Nothing
t0 = timer 'Dictionary Method
Set o = CreateObject("Scripting.Dictionary")
For i = 0 To imax
o.Add i, value
Next
s = s & "[Dictionary " & FormatNumber(timer - t0, 3, -1) & "]"
Set o = Nothing
t0 = timer 'Standard array
Redim a(imax)
For i = 0 To imax
a(i) = value
Next
s = s & "[Array " & FormatNumber(timer - t0, 3, -1) & "]" & vbCRLF
Set a = Nothing
t0 = timer 'Fast array
a = array()
For i = 0 To imax
ub = UBound(a)
If i>ub Then ReDim Preserve a(Int((ub+10)*1.1))
a(i) = value
Next
ReDim Preserve a(i-1)
s = s & "[FastArr " & FormatNumber(timer - t0, 3, -1) & "]"
Set a = Nothing
MsgBox s
' 10000 of "Testvalue" [ArrayList 0.156][Redim 0.016][Dictionary 0.031][Array 0.016][FastArr 0.016]
' 54000 of "Testvalue" [ArrayList 0.734][Redim 0.672][Dictionary 0.203][Array 0.063][FastArr 0.109]
' 240000 of "Testvalue" [ArrayList 3.172][Redim 5.891][Dictionary 1.453][Array 0.203][FastArr 0.484]
' 690000 of "Testvalue" [ArrayList 9.078][Redim 44.785][Dictionary 8.750][Array 0.609][FastArr 1.406]
'1000000 of "Testvalue" [ArrayList 13.191][Redim 92.863][Dictionary 18.047][Array 0.859][FastArr 2.031]