SizeOfArray

Purpose

Returns the number of elements in an array or array dimension.

Integer

Syntax

(SizeOfArray( {ArrayId ) )

(SizeOfArray( {ArrayId [ {DimensionIndex} ] } ))

Where:

• {ArrayId} is the id of the array to retrieve the number of elements for.

• {DimensionIndex} is the dimension index of the array to retrieve the number of elements of. If omitted, the outer (leftmost) dimension is used.

What it Does

SizeOfArray is used to retrieve the number of elements of any array dimension.

Example

The below example returns 10 to iSize.

Integer iMyArray

Move (SizeOfArray(iMyArray)) to iSize

Multi-dimensional arrays and jagged arrays can be thought of as arrays of arrays. So, to get the number of elements of the second dimension of a multi-dimensional or jagged array, you just specify the indexer for the first dimension, resulting in an expression of the array for the particular dimension:

Integer[][] iMyArray

// Move some values to iMyArray

Move (SizeOfArray(iMyArray)) to iSize

The above example retrieves the number of elements in dimension 1 of iMyArray.

Example

This sample declares and fills a dynamic two-dimensional integer array. It then uses SizeOfArray to determine the number of elements of the two dimensions and displays the result to the screen.

Note that this will not work with jagged arrays, since this technique assumes that it's a rectangular array. In other words, the assumption is that each inner array contained in the outer array has the same number of elements. Knowing this, we only need to check the size of the first inner array in order to know the number of elements in all the other inner arrays, since they are the same. For jagged arrays, you need to do this check for each inner array. See the example below for how to do this with jagged arrays.

This example fills an outer array of 3 arrays, where each inner array has 3 elements, conceptually looking like this:

1 2 3

4 5 6

7 8 9

Procedure OnClick

Integer[][] iIntegers1

Integer i j iDim1Size iDim2Size

// fill the array

Move 1 to iIntegers1

Move 2 to iIntegers1

Move 3 to iIntegers1

Move 4 to iIntegers1

Move 5 to iIntegers1

Move 6 to iIntegers1

Move 7 to iIntegers1

Move 8 to iIntegers1

Move 9 to iIntegers1

// retrieve size of outer (leftmost) dimension

Move (SizeOfArray(iIntegers1)) to iDim1Size

// retrieve size of inner (2nd) dimension

Move (SizeOfArray(iIntegers1)) to iDim2Size

// display the array's contents

For i From 0 To (iDim1Size-1)

For j From 0 To (iDim2Size-1)

Show iIntegers1[i][j]

Show " "

Loop

Showln

Loop

End_Procedure

Since the array in this example is declared dynamically (declaration below), each inner array could contain any number of elements, potentially making it a jagged array. This could cause runtime errors or worse, unnoticed but incorrect data, to occur if at a later time more elements are added to inner arrays.

Integer[][] iIntegers1

If you want to ensure that each inner array always has the same number of elements, and protect your code from potential errors, you should declare a dynamic multidimensional array (declaration below), where in the latter declaration each inner array will always contain exactly 3 elements.

Integer[] iIntegers1

Checking Sizes of Jagged Array Dimensions

A jagged array is a non-rectangular array, in which the number of rows is fixed but the number of columns is not. So, you could have an array containing 2 arrays, where the first array has 30 elements, but the second row only has 1 element.

Example

This example is similar to the above example, but uses a jagged array, where each inner array may not have the same number of elements. In this scenario, you have to make sure to check the size of each array using the appropriate DimensionIndex for the array you are currently addressing.

This example fills an outer array of 2 arrays, where the first inner array has 2 elements and the second inner array has 2 elements, conceptually looking like this:

1 2 3

4 5

Procedure OnClick

Integer[][] iIntegers1

Integer i j iDim1Size iDim2Size

// fill the array

Move 1 to iIntegers1

Move 2 to iIntegers1

Move 3 to iIntegers1

Move 4 to iIntegers1

Move 5 to iIntegers1

// retrieve size of outer (leftmost) dimension

Move (SizeOfArray(iIntegers1)) to iDim1Size

// display the array's contents

For i from 0 to (iDim1Size-1)

// check the size of the inner array using it's dimension index

Move (SizeOfArray(iIntegers1[i])) to iDim2Size

For j from 0 to (iDim2Size-1)

Show iIntegers1[i][j]

Show " "

Loop

Showln  // go to next line for next row

Loop

End_Procedure

Notes

• Attempting to reference an array dimension that is beyond the current number of dimensions of the array will result in error 4509 "Reference Array Index Out Of Bounds".