| |

Fortgeschrittene ProgrammierungMhm, mal ein Ansatz  | |  | Autor: unbekannt | Datum: 21.08.01 16:06 |
| Der nachfolgende Source-Code ist urheberrechtlich geschützt:
Copyright vbArchiv.de - Präsentation durch: Ralph Steinkönig Hi,
Klappen tut das, aber ob die Routine schnell genug ist, kann ich mangels Vergleichsmöglichkeiten nicht sagen. Probiere das nachfolgende mal aus, vielleicht kann man hie und da noch etwas feilen. Desweiteren mußte dazu, da mir momentan kein Algorithmus, der das eben tut, bekannt ist, zunächst die Arbeitsumgebung nachgestellt werden. Deswegen erst eine längere Einleitung (andere Forumsteilnehmer wollen auch was davon haben).
Die Aufgabenstellung war:
Eine Klassenauflistung zu sortieren, die wahrscheinlich bis zu 2500 Klassen enthält. Eine Klasse enthält dabei als Eigenschaften:
Typ (Als Byte)
ValY (Als Long)
ValX (Als Long)
Die Klassenauflistung soll hinsichtlich der Wertigkeit von links nach rechts sortiert werden.
Nachdem die drei Eigenschaften eines gemeinsam haben: Es handelt sich um Ganzzahlvariable, war die Lösung eigentlich ziemlich einfach:
Im Projekt wurde zunächst ein Klassenmodul eingefügt und die Klasse clsco getauft. Die clsco enthält folgende Eigenschaften:
Public b As Byte
Public x As Long
Public y As Long
Fertig.
Nun wurde ein Modul ins Projekt eingefügt, im Deklarationsteil eine Instanz auf die Klasse clsco definiert sowie zwei temporäre Collections. Eine weitere Collection wird als quasi die Quell-Collection definiert:
Private scoll As New Collection 'temporäre Collection
Private qcoll As New Collection 'temporäre Collection
Private tmpqcoll As New Collection 'eigentlich Quell-Collection
Private clst As clsco 'Instanz auf die Klasse clsco (späte Bindung) Da ich über derzeit keine collection verfüge, die ca. 2500 Mitglieder einer Klasse clsco beinhaltet, habe ich eine Quellcollection nachkonstruiert, mit dem beschäftigt sich der erste Teil:
Private Sub TestCollection()
Set clst = New clsco
clst.b = 10
clst.x = 1200
clst.y = 2200
qcoll.Add clst
Set clst = New clsco
clst.b = 17
clst.x = 900
clst.y = 2000
qcoll.Add clst
Set clst = New clsco
clst.b = 9
clst.x = 3000
clst.y = 4000
qcoll.Add clst
Set clst = New clsco
clst.b = 20
clst.x = 3200
clst.y = 1200
qcoll.Add clst
Set clst = New clsco
clst.b = 9
clst.x = 900
clst.y = 600
qcoll.Add clst
End Sub Etwas zum Testen brauchen wir ja
Man sieht, die Wertigkeiten wurden wild durcheinander gewürfelt.
Die Frage mit der Wertigkeit:
Man sieht folgendes: Typ = 1, ValY=2000, Valx=3000
Typ = 2, ValY=300, Valx=200
Die Aufgabenstellung verlangt, dass obwohl die zweite Klasse deutlich niedrigere Werte in X und Y hat, dass diese Klasse höherwertig ist! Weil die Eigenschaft typ 2 eben höher als Typ 1 ist. Genauso verhält es sich auch mit den beiden anderen Werten - eben von links nach rechts orientiert.
Der Lösungsansatz springt sofort ins Auge: BINÄRE-Darstellung 
Private Sub SortCollection()
Dim myc As clsco
Dim a As Variant, b As Variant
Dim m As Long
'initialisierung von qcoll
scoll.Add "0"
'initialisierung von tmpqcoll
Set myc = New clsco
With myc
.b = 0
.x = 0
.y = 0
End With
tmpqcoll.Add myc
'Durchlaufen der Quell-Collection
For Each myc In qcoll
'Binäre Zuweisung (Hex-Format)
a = Hex(myc.b) + Hex(myc.x) + Hex(myc.y)
For Each b In scoll
If CLng("&H" + a) > b Then m = m + 1
Next
scoll.Add CLng("&h" + a), After:=m
tmpqcoll.Add myc, After:=m
m = 0
Next
tmpqcoll.Remove 1
Set qcoll = tmpqcoll
Set scoll = Nothing
Set tmpqcoll = Nothing
End Sub Cu
Lordchen |  |
 | 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 |
  |
|
Neu! sevPopUp 2.0 
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|
|
|
Copyright ©2000-2025 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
|
|