Angehängte Types effektiv durchsuchen??
Übersicht

![]() |
AkibaBetreff: Angehängte Types effektiv durchsuchen?? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi! Ich hab folgendes Problem:
Ich hab zwei Types, das eine ist an das andere angehängt. Es soll mit den beiden eine Tabelle enstehen. Das erste Type legt die Anzahl der Spalten fest, das zweite die Anzahl der Spalten pro Zeile. Code: [AUSKLAPPEN] Type dim1
Field Y.dim2 End Type Type dim2 Field z0 Field z1 End Type Und Ich möchte jetzt zu einer bestimmt Zeile und Spalte gehen und schauen, welcher Wert in ihr drin steht. Da hab ich gedacht, dass man es ja so machen könnte, das man, wenn man in einer Zeile anfängt zu suchen, erstmal schaut, ob diese Zeile die richtige ist. Wenn ja, dann durchsucht man die Zeile, wenn nein, dann eben nicht. Ich wollte das einfach mit zwei FOR - EACH Schleifen realisieren. Die erste soll die Zeilen absuchen und die zweite die Spalten. Doch leider sucht die zweite Schleide immer JEDE Zelle ab, die es gibt. Kann man das auch effektiver gestalten? Die zwei Schleifen zum auslesen: Code: [AUSKLAPPEN] zeile = 0
For runter.dim1 = Each dim1 zeile = zeile + 1 If zeile = gesuchte_zeile Then For runter\Y.dim2 = Each dim2 l = l + 1 j1 = runter\Y\z0 j2 = runter\y\z1 Next EndIf Next Die Schleifen zum Erstellen und Initialisieren der Zeilen und Spalten .... (die funktionieren!!) Code: [AUSKLAPPEN] For i = 0 To laenge - 1
runter.dim1 = New dim1 For j = 0 To breite -1 runter\Y = New dim2 runter\Y\z0 = Rand(1, 10) runter\Y\z1 = Rand(1, 10) Next Next |
||
Luigi, man wendet sich nich gegen Familie... |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest auch ein Array verwenden (siehe Dim![]() ![]() |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
Akiba |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, natürlich! Aber die Sache ist, dass die Tabellengröße variablel sein soll .... da wird nicht viel gehen mit dem guten Dim ... leider!
Ich erkunde auch gerade den CreateBank-Befehl ... ich glaube, der ist einfacher zu handhaben. |
||
Luigi, man wendet sich nich gegen Familie... |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Na gut, das ist natürlich ein Problem. Wenn du Banks verwenden willst, ist das hier glaube ich ganz gut geeinget: https://www.blitzforum.de/showcase/335/
Edit: OK, man kann in BMax die Arraygröße nachträglich ändern, ohne das der Inhalt gelöscht wird ![]() |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
- Zuletzt bearbeitet von Nicdel am So, Dez 06, 2009 22:17, insgesamt einmal bearbeitet
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Geht mit Dim auch. Ein weiteres Dim redimensioniert ein Array. Allerdings wird dabei der Inhalt gelöscht. | ||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
Akiba |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Nicdel
Ein solches Array wie in BMax könnt Ich jetzt echt gut gebrauchen ![]() @ D2006 Danke für den Tipp! Damit versuch Ichs jetzt wahrscheinlich mal .... scheint das einfachste zu sein |
||
Luigi, man wendet sich nich gegen Familie... |
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ohne dass der inhalt wirklich gelöscht wird kannste theoretisch mit ein bisschen aufwand auch so machen. einfach ein temporäres, zweites dim machen und nach der größenänderung des dims die werte aus dem temporären in das neue machen und danach das temporäre auch resizen | ||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
![]() |
Akiba |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das war mein Plan ![]() Geht das neudimensionieren auch in Funktionen? Weil bei mir sagt das Programm dann "Duplicate identifier" |
||
Luigi, man wendet sich nich gegen Familie... |
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Dim lol(20,20)
resize() Function resize() Dim lol(40,30) End Function geht bei mir ohne probleme |
||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
![]() |
Akiba |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh, hab eine Dimension vergessen anzugeben .... ![]() Jetzt gehts ^^ |
||
Luigi, man wendet sich nich gegen Familie... |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe mir mal ein paar Gedanken zu deinem Problem gemacht.
Das ist dabei herausgekommen: 1. Du brauchst nur eine For-Schleife und nur einen Type, wenn du nur eine Tabelle hast und man einen relativ "naiven" Weg nehmen möchte. Dieser Weg ist aber immer noch besser als dein Weg. (Suche erst die Zeile und suche mit Hilfe der Schleifenvariable "runter\Y" nach einem Eintrag aus einem anderen Type... Das Field "Y.dim2" zeigt auf einen dim2-Eintrag und ist daher kein eigener Type!) BlitzBasic: [AUSKLAPPEN] Type Feld 2. Bei einer weiter optimierterten, aber etwas komplizierteren Variante braucht man wieder 2 Types: BlitzBasic: [AUSKLAPPEN] Type Zeile Man hat aber bei der Programmierung einen größeren Aufwand, da sich unter den Einträgen vom ersten bis zum letzten Feld einer Zeile kein anderes zu einer anderen Zeile gehörendes Feld befinden darf. Die Suche läuft so ab: Code: [AUSKLAPPEN] Finde das Zeilenobjekt zur Zeilennummer
Gehe vom ersten bis zum letzten Feldobjekt, das zur gefundenen Zeile gehört und schaue, ob es zur Spaltennummer gehört. Wenn das zutrifft, dann ist das aktuelle Feld das gesuchte Feld. Bei der ersten Methode musst du im Extremfall bei einer x*y-Tabelle x*y Einträge durchsuchen. Bei der zweiten Methode musst du maximal nur x+y Einträge durchsuchen. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
da fällt mir doch glatt der Optimierungsthreat ein:
https://www.blitzforum.de/foru...246#260246 Hab das problem auch schon gehabt. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group