2012-03-26 14 views
0

Ich verwende eine Blasensortierfunktion, um Objekte nach ihren Eigenschaften zu sortieren. Leider musste ich für jede Eigenschaft eine Funktion schreiben. Gibt es eine Möglichkeit, die folgenden Funktionen zu verallgemeinern?Bubble-Objekt durch eine beliebige Eigenschaft sortieren?

Statt

SortArticlesByVolume(a) 
SortArticlesByLenght(a) 

schreiben würde Ich mag, wie etwas schreiben:

SortArticles(a, volume) 

Sub SortArticlesByVolume (ByRef Artikel 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).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 

End Sub

Sub SortArticlesBylenght (ByRef Artikel 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 

End Sub

+0

'Länge', wirklich? –

Antwort

1

Ich glaube nicht VBA Sie Reflektion verwenden können, so dass ich nehme an, Sie Ihren Artikel Klasse umschreiben müssten und Methoden hinzufügen zu erhalten Eigenschaften nach Name, wie article.get("volume"), um das Volumen zu erhalten. Wenn Sie nicht zu viele Felder haben, wäre es wahrscheinlich der einfachste Weg. Die get-Funktion würde immer noch irgendeine Art von Select- oder If/Then-Anweisungen erfordern, aber sie wäre in der Klasse selbst eingekapselt.

Verwandte Themen