Hallo erstmal,
ich stehe etwas auf dem Schlauch.
Wie kann ich dynamische Arrays in PureBasic erstellen?
Benötigt wird eine Strucktur wie diese:
var size = 8
EinArray= new Array(3*size); //In JavaScript gibt es nur 1-Dimensionale Arrays
for (i=0; i<3*size; i++) EinArray = new Array(); //Array einem Array zuweisen (geht in PureBasic ja so nicht)
//Zugriff (z.Bsp.)
EinArray[0][2] = 1;
*JavaScript ->(to) PureBasic
Wichtig ist das dynamische Verhalten der "2. Dimension" des Arrays.
Eine Manipulation das Arrays sollte wie in JavaScript möglich sein:
EinArray[1].length = 3 //Verändert nur die Länge der 2. dynamischen Dimension
ReDim() unter PureBasic würde gehen, aber nur wenn die 2. Dimension statisch ist.
Wie ich das evtl. mit Listen machen soll ist mir noch nicht klar.
Global Dim EinArray((3*size)-1, 999) ;Dies ist falsch (die 2. Dimension muss am Anfang 0 sein und dynamisch wachsen können !!!)
Danke für jegliche Hilfe
Dynamische Arrays erstellen
Re: Dynamische Arrays erstellen
Code: Alles auswählen
Structure SubArray
Array Test.i(0)
EndStructure
Dim MainArray.SubArray(10)
Define I
For I = 0 To 10
Dim MainArray(I)\Test(I)
Next
Debug ArraySize(MainArray(4)\Test())
ReDim MainArray(4)\Test(15)
MainArray(4)\Test(15) = 123 ; Zugriff
Debug ArraySize(MainArray(4)\Test())
FreeArray(MainArray(4)\Test())
Debug ArraySize(MainArray(4)\Test())
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Dynamische Arrays erstellen
Es geht über einen Umweg:
Edit: Mensch STARGATE. Wieso wusste ich, dass du auch gleich antworten wirst. 
Code: Alles auswählen
EnableExplicit
Structure dynamicArray
Array a.i(0)
EndStructure
Define size.i = 8
; Erstelle Array mit 3 * size Arrays der Größe 1 (0 geht nicht)
Dim EinArray.dynamicArray(3 * size - 1)
; Ändere Größe des Arrays an Position 2 auf 10
ReDim EinArray(2)\a(9)
EinArray(2)\a(9) = 10
Debug EinArray(2)\a(9)

Re: Dynamische Arrays erstellen
Danke!
So könnte es funktionieren.
Es wird jetzt sehr oft den Aufruf ReDim geben.
Ich muss das jetzt irgend wie als Prozedure hinbekommen.
So könnte es funktionieren.
Es wird jetzt sehr oft den Aufruf ReDim geben.
Ich muss das jetzt irgend wie als Prozedure hinbekommen.
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Dynamische Arrays erstellen
Es ist immer besser, wenn man vorher weiß, wie groß das Array werden wird. Denn ReDim ist nicht gerade resourcensparend. Es überprüft, ob es den aktuell benutzen Speicherbereich erweitern kann. Falls ja, geht es schnell; falls nein, muss an anderer Stelle im Speicher Platz gefunden werden, alle bisherigen Elemente des Arrays dorthin kopiert werden, und dann ist es fertig.
Um also zumindest ein bisschen zu optimieren, würde ich vorher schätzen, wie viele Elemente ich im Voraus brauche und schonmal einen ganzen Batzen allozieren.
Du machst also z.B. immer nur für jeden 100er-Schritt ein Redim und erweiterst jedes mal das Array um 100 Elemente, wenn sie nicht mehr reichen. Damit ersparst du dir wahrscheinlich schon mal jede Menge Rumkopiererei.
Um also zumindest ein bisschen zu optimieren, würde ich vorher schätzen, wie viele Elemente ich im Voraus brauche und schonmal einen ganzen Batzen allozieren.
Du machst also z.B. immer nur für jeden 100er-Schritt ein Redim und erweiterst jedes mal das Array um 100 Elemente, wenn sie nicht mehr reichen. Damit ersparst du dir wahrscheinlich schon mal jede Menge Rumkopiererei.
- TroaX
- Beiträge: 684
- Registriert: 08.03.2013 14:27
- Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
- Wohnort: NRW
- Kontaktdaten:
Re: Dynamische Arrays erstellen
Ach neee das ist ja sogar die Lösung für mein Sessionproblem. Das ist ja klasse 

PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node