Array Sizing

BlitzMax Forums/BlitzMax Beginners Area/Array Sizing

Eikon(Posted 2005) [#1]
I just realized you can only slice one dimensional arrays, so what I'm wondering is how can I size my array to the width/height of my loaded map. Is it possible to declare a global array and then define it's size later? Can you release an existing array and then redim it inside a function? My current method makes a huge array to accommodate any map, and this wastes a lot of memory. Any suggestions welcome.

Global Map:Tile[1000, 1000, 2]

Function LoadMap()

' I now know map width + height. How can I make a global array of this size now

End Function



Perturbatio(Posted 2005) [#2]
you could use an array of arrays


PowerPC603(Posted 2005) [#3]
You could use an array of arrays.
You can then resize the main array and you can resize all subarrays all independently.

Global Map$[][]

Function ResizeArray(width, height)
	' Resize the main array (which is used here as the width-index)
	Map = Map[..width]

	' Resize all subarrays (each index of the main array points to a different subarray)
	For i = 0 Until width ' "Until" is used, because you have index "0" to index "width - 1" (0-based arrays)
		Map[i] = Map[i][..height]
	Next
End Function

Function PrintArraySize()
	Print Map.length ' Print the total width of the array ("0" - "width-1")

	Print Map[0].length ' Print the total height of the array ("0" - "height-1")
End Function

ResizeArray(640, 480)
PrintArraySize()

' To put something inside the array at x = 20 and y = 50, do this:

Map[20][50] = "This is arrayindex 20, 50"
Print Map[20][50]


Note that I've used a string-array here, but you can use any type you want (replace "Global Map$" by "Global Map:Tile").


Dreamora(Posted 2005) [#4]
do you mean something like that?
Global Map:Tile[,,]

Function LoadMap()

' I now know map width + height. How can I make a global array of this size now
  Map = new Tile[width, height, 2]
End Function



Eikon(Posted 2005) [#5]
Thanks for the help everyone. I finally understood the concept thanks to PowerPC's excellent example. Here is the final code incase anyone else needs to size a 3 dimensional array of types.