vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

Fortgeschrittene Programmierung
Mhm, 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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Sortieren in Collections87Exceptionfault21.08.01 12:12
Mhm, mal ein Ansatz 332unbekannt21.08.01 16:06
Re: Mhm, mal ein Ansatz 41Exceptionfault21.08.01 16:44
Prüfprotokoll der Vergleichscollection scoll:292unbekannt21.08.01 16:45
Noch ne kleine Frage39Exceptionfault21.08.01 17:27
Re: Noch ne kleine Frage269unbekannt21.08.01 17:47
Re: Noch ne kleine Frage271unbekannt21.08.01 17:50
Nachtrag:282unbekannt21.08.01 18:05
Sorry, nicht ganz...29Exceptionfault21.08.01 21:36
Re: Sorry, nicht ganz...295unbekannt21.08.01 22:04

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-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