[vJass] 2D Array

~GaLs~

† Ғσſ ŧħə ѕαĸε Φƒ ~Ğ䣚~ †
Reaction score
180
Two dimensional arrays in vJass, since vJass is implemented on top of Jass, are just normal arrays in disguise, using a multiplication trick to convert 2-dimension indexes into a one-dimension one. The way to declare one of these arrays is: <type> array name[width][height], notice the real size of the array is width*height, this size suffers the same limitations as normal array's size, it cannot go above approximately 40800, and if this size is bigger than 8191, you will be using slower function calls instead of array lookups and multiple arrays in the final script, etc.

Declaration : <type> array name[width][height]

Let say, I have a 2D array var:
JASS:
globals
    integer array int [10][10]
endglobals


And, I was told that the arrays are just normal arrays in disguise, using a multiplication trick to convert 2-dimension indexes into a one-dimension one.
And, the real size of the array is width*height.

So, int[1][2] = int[2][1]?

Since 1x2 = 2, and 2x1 = 2...
 

Builder Bob

Live free or don't
Reaction score
249
int[1][2] != int[2][1]

int[1][2] => 1 + 2 * 10 = 21
int[2][1] => 2 + 1 * 10 = 12

int[x][y] => x + y * width
 

~GaLs~

† Ғσſ ŧħə ѕαĸε Φƒ ~Ğ䣚~ †
Reaction score
180
Why x+y*width?
Isn't it just width*height?
 

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
Why x+y*width?
Isn't it just width*height?

X represents the column of the 2d array, Y represents the Row.

If our max width was "12" for example, array members would go:

[Y][X]:
[1][1], [1][2], [1][3], [1][4], [1][5], [1][6], [1][7], [1][8], [1][9], [1][10], [1][11], [1][12], [2][1], [2][2] ... etc.

This is creating a relationship between X and Y that is the same as that between an inch and a foot. 12 X's equal 1 Y, or 12 inches equal 1 foot. Since JASS is limited to just one array member, or just one form of measurement, we can use the formula:
index = x + y*width, OR
total inches = inches + feet * 12 to get the actual array index or inches. Because y always equals 12 X's, [4][1] will not equal [1][4].

If you just multiplied the two together, as you suggested above however, you'd get the same index.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top