vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Collection 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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