fb:porticula NoPaste
mehrdimensional.bas
Uploader: | ThePuppetMaster |
Datum/Zeit: | 24.04.2008 22:45:11 |
'##############################################################################################################
' LinkedList-Beispiel: Mehrdimensional
'##############################################################################################################
'Dieses Beispiel zeigt die Bildung einer mehrdimensionalen Collection mit der LinkedList.
'Zuerst müssen wir das Modul includieren, das uns die ganzen Funktionen zur LinkedList
'Steuerung bereit stellt.
#include "linkedlist.bi"
'einen Handel-Pointer für die LinkedList erstellen
Dim shared G_Liste as integer PTR
'Noch kurz zwei Variable die wir im Programm brauchen, erstellen
Dim X as UInteger
Dim Y as UInteger
'Eine Variable für eine neue Liste erstellen
Dim T_Ptr as Integer PTR
'Jetzt erstellen wir das grundgerüst der mehrdimensionalen Liste ... die erste Dimension,
'wenn man so sagen mag ( wir bilden einfahc mal 3 elemente, damit die ausgabe nicht zu gross wird
For X = 1 to 3
'Ein neues Element an die Liste anhängen. Hier müssen wir jedoch aufpassen!
'Das LinkedList Modul ist NICHT in der lage Funktionsübergreifend Speicheroperationen
'durchzuführen! ... Bei Eindimensionalen Arrays ist das noch möglich, jedoch nicht
'wenn man so exzessiv mit getackten Funktionsaufrufen arbeitet!
'Aus diesem Grunde müssen wir hier zufor eine Liste Inizialisieren und dann speichern.
'Die Funktion ColAdd würde zwar bei nicht vorhandener Liste eine Liste erstellen,
'könnte diese aber nicht, wie in der nächsten schleife zu sehen ist, der Funktion
'als rückwirkende Rückgabe mitteilen. Dadurch würde keine liste erstellt und folglich
'würden keine einträge in die 2te Dimension statfinden.
'Aus diesem grunde bedinen wir uns der Funktion "ColCreate" die uns netterweise
'Eine Collection erstellt und dessen Pointer zurück liefert.
'Dieser Pointer wird dann der Liste der ersten Dimension (G_LISTE) hinzugefügt.
'Die Liste der ersten Dimension müssen wir hier nicht Inizialisieren (ColCreate)
'Da die Funktion auf die mit ByRef angegebene Variable direkt zugreifen kann um
'dort sofort den neuen Pointer der Liste zu speichern. (sofern erfolderlich)
ColAdd(G_Liste, ColCreate())
Next
'jetzt können wir die 2te Dimension erstellen. Hier nehmen wir mal 5 Elemente
For X = 1 to 3
'Um Den Vorgang zu beschleunigen hohlen wir zuerst den Pointer der Liste
'der 2ten Dimension, bevor wir auf diese Zugreifen udn unsere Elemente ablegen.
T_PTR = ColGetIntPTR(G_Liste, X)
For Y = 1 to 5
'Nun können wir die Elemente abspeichern.
ColAdd(T_PTR, Str(X) & "-" & Str(Y))
Next
Next
'Zuerst müssen wir erfahren, wie viele Elemente sich in der Liste befinden.
For X = 1 to ColCount(G_Liste)
'Auch hier speichern wir den Pointer zwischen
T_PTR = ColGetIntPTR(G_Liste, X)
'Anschliessend gehen wir alle elemente der 2ten Diemension durch und geben sie aus.
For Y = 1 to ColCount(T_PTR)
Print ColGetStr(T_PTR, Y)
Next
Next
'Dies kann man natürlich auch auf x beliebige dimensionen erweitern.
'Es müssen auch nicht alle elemente in jeder Dimension gefüllt sein. Das erstellen einer dimension
'jetzt dies nicht vorraus.
'Aber, ich schlage vor, man probiert es einfach mal selbst aus.
'===============================================================================================================
'WICHTIG ist zu wissen, das solche mehrdimensionalen Listen auch speicherzugriffsfehler erzeugen können!
'Man sollte sich hierbei vor augen halten, das mit Pointer gearbeitet wird, und daher sollte man IMMER
'auf die richtige Variable achten, und deren konsistenz sicherstellen!!
'===============================================================================================================