SizeOfArray

See Also: AppendArray, ResizeArray, Array Functions, Array Variable Assignments, Working with Arrays

Purpose

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

Return Type

Integer

Syntax

(SizeOfArray( {ArrayId ) )

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

Where:

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[10] 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[1])) 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[0][0]

    Move 2 to iIntegers1[0][1]

    Move 3 to iIntegers1[0][2]

    Move 4 to iIntegers1[1][0]

    Move 5 to iIntegers1[1][1]

    Move 6 to iIntegers1[1][2]

    Move 7 to iIntegers1[2][0]

    Move 8 to iIntegers1[2][1]

    Move 9 to iIntegers1[2][2]

 

    // retrieve size of outer (leftmost) dimension

    Move (SizeOfArray(iIntegers1)) to iDim1Size

 

    // retrieve size of inner (2nd) dimension

    Move (SizeOfArray(iIntegers1[1])) 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[][3] 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[0][0]

    Move 2 to iIntegers1[0][1]

    Move 3 to iIntegers1[0][2]

    Move 4 to iIntegers1[1][0]

    Move 5 to iIntegers1[1][1]

 

    // 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