A dynamic array is an array that is a real Gambas object. The size of a dynamic array can be queried at runtime. A dynamic array with a dimension can be resized at any time.
Example:
[1] Public Sub btnShowExample_Click() [2] Dim i, j As Integer [3] Dim a2DDateArray As New Date[][] [4] Dim myArray As Date[] [5] [6] a2DDateArray.Resize(10) ' * [7] [8] For i = 0 To 9 [9] a2DDateArray[i] = New Date[] [10] a2DDateArray[i].Resize(5) ' ** [11] For j = 0 To 4 [12] a2DDateArray[i][j] = Date(Now() + j – i) ' Generate different date values [13] Next ' j [14] Next ' i [15] [16] ' Output IDE console (example schedule): [17] For Each myArray In a2DDateArray [18] For j = 0 To myArray.Max [19] Print Format(myArray[j], "dd. mm. yyyy"); " | "; [20] If (j + 1) Mod (myArray.Max + 1) = 0 Then Print [21] Next ' j [22] Next ' myArray [23] [24] Print "Dimension of a2DDateArray: ", a2DDateArray.Dim [25] Print "Number of elements of 'a2DDateArray': ", a2DDateArray.Count [26] Print "Number of elements of 'a2DDateArray': ", a2DDateArray.Bounds[0] ' Alternative [27] [28] End ' btnShowExample_Click()
Output in the IDE console:
29. 04. 2014 | 30. 04. 2014 | 01. 05. 2014 | 02. 05. 2014 | 03. 05. 2014 | 28. 04. 2014 | 29. 04. 2014 | 30. 04. 2014 | 01. 05. 2014 | 02. 05. 2014 | 27. 04. 2014 | 28. 04. 2014 | 29. 04. 2014 | 30. 04. 2014 | 01. 05. 2014 | 26. 04. 2014 | 27. 04. 2014 | 28. 04. 2014 | 29. 04. 2014 | 30. 04. 2014 | 25. 04. 2014 | 26. 04. 2014 | 27. 04. 2014 | 28. 04. 2014 | 29. 04. 2014 | 24. 04. 2014 | 25. 04. 2014 | 26. 04. 2014 | 27. 04. 2014 | 28. 04. 2014 | 23. 04. 2014 | 24. 04. 2014 | 25. 04. 2014 | 26. 04. 2014 | 27. 04. 2014 | 22. 04. 2014 | 23. 04. 2014 | 24. 04. 2014 | 25. 04. 2014 | 26. 04. 2014 | 21. 04. 2014 | 22. 04. 2014 | 23. 04. 2014 | 24. 04. 2014 | 25. 04. 2014 | 20. 04. 2014 | 21. 04. 2014 | 22. 04. 2014 | 23. 04. 2014 | 24. 04. 2014 | Dimension of 'a2DDateArray': 1 Number of elementes of 'a2DDateArray': 10 Number of elementes of 'a2DDateArray': 10 ' Alternative
The structure of the grouped display also corresponds to the memory structure in the array' a2DDateArray', as you can access the 4th date in the 7th element, for example:
Print Format(a2DDateArray[6][3], "dd. mm yyyy")
Note that both 'a2DDateArray' and all arrays 'a2DDateArray[i]' (–> line 9) with the index i from the interval from 0 to 9 are one-dimensional arrays and you therefore have the possibility to change the dimension at runtime! In the lines (1*) and (2*) this is also practiced, which would not be possible with the following (static) declaration:
Dim a2DDateArray As New Date[10][5]
You could do without the help array' myArray' if you change the source code for the output in this way:
For i = 0 To a2DDateArray.Max For j = 0 To a2DDateArray[i].Max If (j + 1) Mod (a2DDateArray[i].Max + 1) = 0 Then Print Format(a2DDateArray[i][j], "dd. mm. yyyy"); " | " Else Print Format(a2DDateArray[i][j], "dd. mm. yyyy"); " | "; Endif Next ' j Next ' i
Dynamic arrays of structures are currently not supported (–> chapter 7.2.1.2 Arrays of structures), because' Struct' is meant to be a structured data container. If you need dynamic arrays, use a class instead of a structure, because in Gambas you can derive a dynamic array type from each class.
Structure:
Public Struct Schueler JGS As Integer BirthDate As Date Lastname As String DG1Course As String DG2Course As String End Struct
Source code CDS. class:
' Gambas class file ' This class is a (pure) data structure without its own methods. ' For example, it represents a data record Public JGS As Integer Public BirthDate As Date Public Lastname As String Public DG1Course As String Public DG2Course As String
In the main program, you can use CDS[] to generate a dynamic array type whose elements are objects of type CDS –> Chapter 7.4.3.2 Derived arrays. You can work with this derived array in the same way as you are used to working with structures, but without the (static) constraints of a structure.