Bubble сортировать объект по любому свойству? - PullRequest
0 голосов
/ 26 марта 2012

Я использую функцию пузырьковой сортировки для сортировки объектов по их свойствам.К сожалению, мне пришлось написать одну функцию для каждого свойства.Есть ли способ обобщить функции ниже.

Вместо написания

SortArticlesByVolume(a)
SortArticlesByLenght(a)

Я хотел бы написать что-то вроде:

SortArticles(a, volume)

Sub SortArticlesByVolume (ByRef статьиКак вариант)

Dim sorted As Boolean
Dim i As Integer

sorted = False
Do While Not sorted
    sorted = True
    For i = 0 To UBound(articles) - 1
        If articles(i).volume < articles(i + 1).volume Then
            Set temp = articles(i + 1)
            Set articles(i + 1) = articles(i)
            Set articles(i) = temp
            sorted = False
        End If
    Next i
Loop

Конец Sub

Sub SortArticlesBylenght (ByRef Articles As Variant)

Dim sorted As Boolean
Dim i As Integer

sorted = False
Do While Not sorted
    sorted = True
    For i = 0 To UBound(articles) - 1
        If articles(i).lenght < articles(i + 1).lenght Then
            Set temp = articles(i + 1)
            Set articles(i + 1) = articles(i)
            Set articles(i) = temp
            sorted = False
        End If
    Next i
Loop

Конец Sub

1 Ответ

1 голос
/ 26 марта 2012

Я не думаю, что VBA позволяет вам использовать отражение, поэтому я полагаю, вам нужно будет переписать свой класс статьи и добавить методы для получения свойств по имени, например article.get("volume") для получения тома. Если у вас не слишком много полей, это будет самый простой способ. Функция get по-прежнему требует какой-то инструкции Select или If / Then, но она будет инкапсулирована в самом классе.

...