Я исправил алгоритм быстрой сортировки, который нашел в Интернете и который сортирует коллекцию.Именно здесь https://excelmacromastery.com/excel-vba-collections/#Sorting_a_Collection, спасибо моему автору.
Моя версия этого, которая работает, сортирует Коллекцию классов по ключу сортировки, содержащемуся в классе.Я хотел бы расширить этот алгоритм для сортировки коллекции по второму ключу, также содержащемуся в классе.Как я могу пойти по этому поводу?Я жестко закодировал ключ сортировки, который, вероятно, должен быть параметризован.Вот мой код:
Sub ClassQuickSort(coll As Collection, first As Long, last As Long)
Dim vCentreVal As Variant
Dim lTempLow As Long
Dim lTempHi As Long
lTempLow = first
lTempHi = last
Dim clsTemporaryError As clsError, clsLowError As clsError, clsHiError As clsError
Dim clsSingleError As clsError
Set clsSingleError = coll.Item((first + last) \ 2)
vCentreVal = clsSingleError.variable_name
Do While lTempLow <= lTempHi
Do While coll.Item(lTempLow).variable_name < vCentreVal And lTempLow < last
lTempLow = lTempLow + 1
Loop
Do While vCentreVal < coll.Item(lTempHi).variable_name And lTempHi > first
lTempHi = lTempHi - 1
Loop
If lTempLow <= lTempHi Then
' Swap values
Set clsTemporaryError = coll.Item(lTempLow)
coll.Add coll.Item(lTempHi), After:=lTempLow
coll.Remove lTempLow
coll.Add clsTemporaryError, Before:=lTempHi
coll.Remove lTempHi + 1
' Move to next positions
lTempLow = lTempLow + 1
lTempHi = lTempHi - 1
End If
Loop
If first < lTempHi Then ClassQuickSort coll, first, lTempHi
If lTempLow < last Then ClassQuickSort coll, lTempLow, last
End Sub
clsError имеет 6 членов, как показано ниже:
Public filename As String
Public SysID_Data As Integer
Public PlanReference_Data As String
Public MemberReference_Data As String
Public variable_name As String
Public errortype As String