Problem mit einem Array
Übersicht

![]() |
HubsiBetreff: Problem mit einem Array |
![]() 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 ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
DAK |
![]() 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 |
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank ![]() ![]() 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


Powered by phpBB © 2001 - 2006, phpBB Group