| |
Fortgeschrittene ProgrammierungCollection mit Klassen sortieren | | | Autor: stb28 | Datum: 28.02.20 08:08 |
| Hallo mal wieder,
ich stehe gerade vor dem Problem der Sortierung.
In einer Collection habe ich eine unterschiedliche Anzahl von Items.
Jedes Item ist ein definierte Klasse mit variablen Inhalten.
Ich versuche, eine Funktion zu schreiben, die die Items der Collection nach einer definierten Variablen in der Klasse sortiert.
' Meine Klasse
Public strText as string
public lngIrgendeinWert as long
' und noch viele andere Variablen Die Collection muss ich manchmal nach den Zahlen oder nach Texten sortieren.
Alle Beispiele die ich bisher gefunden habe, sind nur mit String, aber nicht mit Klassen.
Ich versuche das so allgemein wie möglich zu schreiben, damit der Code variabel nutzbar ist.
Vielleicht hat das schon mal jemand gemacht?
Kollege Google hat mir leider nicht geholfen ...
Viele Grüße
Bernd | |
Re: Collection mit Klassen sortieren | | | Autor: markusxy | Datum: 01.03.20 16:59 |
| Hast du dein Problem bereits gelöst?
So wie du habe ich bis jetzt nur Basis Variablen sortiert, sehe jetzt aber nicht wo das Problem bei Objekten liegen könnte.
Was bis jetzt ein String oder eine Zahl ist, bleibt ja genauso ein Property einer Klasse.
Der Unterschied ist also minimal.
Welches Sortier-Verfahren verwendest du? | |
Re: Collection mit Klassen sortieren | | | Autor: stb28 | Datum: 01.03.20 19:41 |
| Hi,
vielen Dank für die Sonntagsarbeit.
Ich möchte die Funktion allgemein schreiben, weiß aber nicht, wie ich auf die Variablen in der Klasse zugreifen kann.
Könnte so aussehen:
public function SortCollection (objCol as collection, strVariableName as _
string, sortDirection as string ) as boolean
' genutzt wird die genannte Variable in der enthaltenen Klasse
' Sortierrichtung mit ASC oder DESC
... Klar, anstelle der üblichen Strings kann ich den String aus der Klasse nehmen.
Das Sortierverfahren ist nicht so relevant, da ich meist nur wenige Hundert Items habe.
Ich hoffe, ich konnte mich verständlich ausdrücken
Viele Grüße
Bernd | |
Re: Collection mit Klassen sortieren | | | Autor: markusxy | Datum: 03.03.20 20:39 |
| Hallo Bernd,
die CallbyName Funktion könnte dir helfen.
Damit kannst du über den Property Namen zugreifen. | |
Re: Collection mit Klassen sortieren | | | Autor: stb28 | Datum: 04.03.20 09:20 |
| Hi,
vielen Dank. Diese Funktion habe ich bisher nie gebraucht. Wusste deshalb nicht, nach was ich suchen sollte.
Damit kann ich arbeiten, funktioniert recht gut.
Public Function SortCollection(objData As Collection, strField As String, _
Optional strRichtung As String = "asc") As Boolean
Dim objTemp As Object
Dim i As Long
Dim j As Long
Dim bolResult As Boolean
If objData.Count > 1 Then
For i = 1 To objData.Count - 1
For j = i + 1 To objData.Count
bolResult = CompareKeys(CallByName(objData(i), strField, _
VbGet), CallByName(objData(j), strField, VbGet))
If Not strRichtung = "asc" Then bolResult = Not bolResult
If bolResult Then
Set objTemp = objData(j)
With objData
.Remove j
.Add objTemp, , i
End With
End If
Next j
Next i
End If
End Function
Private Function CompareKeys(var1 As Variant, var2 As Variant) As Boolean
' Einfacher Vergleich
If var1 > var2 Then CompareKeys = True
End Function Für große Datenmengen nehme ich dann andere Sortierfunktionen. (Meist über ADO Recordset)
Viele Grüße
Bernd | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|