Быстрая сортировка коллекции классов с использованием нескольких ключей сортировки, возможно ли это? - PullRequest
0 голосов
/ 07 июня 2018

Я исправил алгоритм быстрой сортировки, который нашел в Интернете и который сортирует коллекцию.Именно здесь 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...