Для коротких списков (массивов) вы можете использовать невидимый ListBox или изготовленный набор записей ADO, или вы можете вручную написать короткую процедуру сортировки.Производительность обычно не является большой проблемой, пока у вас нет больших списков для сортировки.
Вот пример использования временной коллекции.Он имеет то же преимущество, что и использование набора записей, поскольку он может нести многозначные элементы, что быстро становится неуклюжим при использовании многомерных массивов.Чтобы сделать это с помощью Collection, вы должны создать небольшой класс, содержащий значения (включая ключ сортировки), которые вы должны иметь при себе.
Этот конкретный подход может быть оптимизирован с помощью бинарного поиска вместо простогопоследовательный поиск (здесь «цикл J»):
Option Explicit
Private Sub Form_Load()
Dim A(9) As String, B(9) As String
Dim I As Integer, J As Integer
'Create some data, here we'll use String values but Date,
'Integer, Double, whatever work as well.
Randomize
For I = 0 To 9
A(I) = CStr(Fix(Rnd() * 100000))
A(I) = Right$(String$(5, "0") & A(I), 6)
Next
'Sort A() as B(). Could just as easily copy the results
'back into A() instead.
With New Collection
For I = 0 To UBound(A)
For J = 1 To .Count
If A(I) <= .Item(J) Then
.Add A(I), , J
Exit For
End If
Next
If J > .Count Then .Add A(I)
Next
For I = 1 To .Count
B(I - 1) = .Item(I)
Next
End With
'Print before and after.
AutoRedraw = True
Print "A", "B"
Print
For I = 0 To 9
Print A(I), B(I)
Next
End Sub
Конечно, с чем-то вроде «даты», представленной в виде строкового значения, вам все равно нужно его нормализовать для сортировки, как уже упоминали другие.Здесь это моделируется созданием значений String на основе чисел и заполнением начальными нулями для нормализации.