See Also: AppendArray, ResizeArray, Array Functions, Array Variable Assignments, Working with Arrays
Returns the number of elements in an array or array dimension.
(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.
SizeOfArray is used to retrieve the number of elements of any array dimension.
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.
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
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.
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
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".