A reader of the previous episode asked me

Why are there two types of multidimensional arrays? What is the difference between the `arr(x)(y)`

and `arr(x,y)`

notations?

Good question. There are two kinds of multidimensional arrays, called “**rectangular**” and “**ragged**“. (Or “jagged”; either is common.)

A rectangular array is, well, rectangular. In VBScript you say

Dim MyArray(3,2)

and you get an array with indices:

(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2)
(2,0) (2,1) (2,2)
(3,0) (3,1) (3,2)

which makes a nice rectangle. A three-dimensional array makes a rectangular prism, and so on up into the higher dimensions.

Now, as I mentioned earlier, JavaScript does not have multidimensional arrays. A clever trick to simulate multidimensional arrays in JavaScript is to make an array of arrays:

var x = new Array(
new Array(1, 2, 3),
new Array(4, 5),
new Array(6, 7, 8, 9));

Dereferencing the outer array gives you the inner array, which can then be dereferenced

itself:

print(x[2][0]); // 6

But you notice something about the indices if we write them out as before:

[0][0] [0][1] [0][2]
[1][0] [1][1]
[2][0] [2][1] [2][2] [2][3]

The indices make a ragged pattern, not a straight rectangular pattern.

You can have ragged higher dimensional arrays as well, though allocating all the sub-arrays gets to be a royal pain, and I recommend against it.

There are often times when you want ragged arrays even in a language that supports rectangular multi-dimensional arrays, so VBScript supports both. If you say

MyArray(2,3)

then you are talking to a rectangular two-dimensional array. If you say

MyArray(2)(3)

then you are talking to a one dimensional array that contains another one dimensional array.

### Like this:

Like Loading...

*Related*

Pingback: Porting old posts, part 2 | Fabulous adventures in coding