Problem mit einem Array
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
HubsiBetreff: Problem mit einem Array |
Mo, Okt 03, 2016 12:56 Antworten mit Zitat |
|
---|---|---|
Schönen guten Tag
Ich möchte einem zweidimensionalen Array eine neue Größe zuweisen. Der letzte Stand meiner Bemühungen ist folgender: BlitzMax: [AUSKLAPPEN] Local map_gfx:TImage[100, 2], map_data:Byte[0, 0] So hab ichs mir aus der Hilfe in BLIde zusammengefrickelt und nach letzter Überlegung als syntaktisch richtig erachtet. Nur Blitz will das nicht einsehen Was mache ich falsch? |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
DAK |
Mo, Okt 03, 2016 14:46 Antworten mit Zitat |
|
---|---|---|
Ich glaub ehrlich nicht, dass zweidimensionale Arrays slicing zulassen. Verwend doch besser ein Array-of-Arrays.
Edit: Wenn du deine letzte Zeile änderst auf BlitzMax: [AUSKLAPPEN] map_data = map_data[..x] dann zeigt dir BMax eine bessere Meldung dazu: Zitat: Compile Error
Slices can only be used with strings or one dimensional arrays |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
FireballFlame |
Mo, Okt 03, 2016 22:38 Antworten mit Zitat |
|
---|---|---|
DAK hat recht, mehrdimensionale Arrays sind für sowas nicht gedacht; benutz lieber verschachtelte Arrays.
Zur Erklärung: Mehrdimensionale Arrays (anders als verschachtelte, also Arrays von Arrays) werden intern als eindimensionale Arrays behandelt, was man z.B. sehen kann, wenn man sie sich mit dem Debugger anschaut. Die enthaltenen Werte liegen alle hintereinander im Speicher, wobei die einzelnen Index-Dimensionen praktisch von hinten nach vorne durchlaufen werden; d.h. z.B. bei einem 2D-Array mit der Größe [3,3] liegen die Elemente in der Reihenfolge [0,0], [0,1], [0,2], [1,0], [1,1], [1,2], [2,0], [2,1], [2,2]. Würdest du nun versuchen, die Größe der 2. Dimension zu ändern, müsste das Array dazu in lauter kleine Teile zerstückelt und neu zusammenfügt werden, z.B. so: [0,0], [0,1], [0,2], [0,3], [1,0], [1,1], [1,2], [1,3], [2,0], [2,1], [2,2], [2,3]. Beim Verkleinern müssten beim Zusammenfügen einige der Originalteile ausgelassen, beim Vergrößern neue Teile zwischen den anderen eingefügt werden. Das wäre aber sehr ineffizient, daher gibt es diese Funktionalität in BlitzMax nicht. (Die einzige Ausnahme wäre die vorderste Dimension. Dort gibt es das Problem nicht, denn um deren Größe zu ändern müsste wie beim 1D-Array nur was vom Gesamtarray abgeschnitten bzw. daran angehängt werden. Das könnte man auch durchaus mit Trickserei erreichen (neues Array erstellen und Inhalt mit MemCopy rüberkopieren, oder die BlitzMax-internen Array-Funkionen manuell aufrufen), aber das ist nur empfehlenswert, wenn man wirklich weiß, was man tut, und normalerweise den Aufwand eh nicht wert.) |
||
Hubsi |
Di, Okt 04, 2016 19:45 Antworten mit Zitat |
|
---|---|---|
Vielen Dank Dann muss ich sehen was man tun kann
Edit: Bin jetzt gerade zufällig über eine Lösung gestolpert: BlitzMax: [AUSKLAPPEN] Local mein_array:Int[1,1,1] Vielleicht hilfts nochmal jemandem weiter |
||
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group