# GAMBAS BOOK 3.15.2

## Data types

### Chapters

02.07.2018
k7:k7.4:k7.4.2:start

## 7.4.2 Dynamic arrays

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) ' Unterschiedliche Datumswerte generieren
[13]     Next ' j
[14]   Next ' i
[15]
[16] ' Ausgabe IDE-Konsole (Beispiel Terminplan):
[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 von a2DDateArray: ", a2DDateArray.Dim
[25]   Print "Anzahl Elemente von 'a2DDateArray': ", a2DDateArray.Count
[26]   Print "Anzahl Elemente von 'a2DDateArray': ", a2DDateArray.Bounds[0] ' Alternative
[27]
[28] End ' btnShowExample_Click() ```
• An empty array for date values' a2DDateArray' of type Date[] is created in row 3.
• In line 6, space is also dynamically reserved for 10 elements of the data type Date[].
• In the two FOR-NEXT control structures (lines 8 to 14), Date[] arrays are created (line 9), the number of elements in the Date[] array is set to 5 with the resize (…) method? and each filled with 5 different date values.
• In lines 17 to 22, each element is read from the array' a2DDateArray' and then the 5 date values stored in each element are read and grouped together. This is ensured by lines 19 and 20.

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 von 'a2DDateArray':           1

Anzahl Elemente von 'a2DDateArray':     10
Anzahl Elemente von '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
GebDatum As Date
Nachname As String
DG1Kurs As String
DG2Kurs 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 GebDatum As Date
Public Nachname As String
Public DG1Kurs As String
Public DG2Kurs 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.

Articles

## ﻿7.4.2 Dynamische Arrays

Ein dynamisches Array ist ein Array, das ein echtes Gambas-Objekt ist. Die Größe eines dynamischen Arrays kann zur Laufzeit abgefragt werden. Ein dynamisches Array mit einer Dimension kann jederzeit in seiner Größe geändert werden.

Beispiel:

```[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) ' Unterschiedliche Datumswerte generieren
[13]     Next ' j
[14]   Next ' i
[15]
[16] ' Ausgabe IDE-Konsole (Beispiel Terminplan):
[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 von a2DDateArray: ", a2DDateArray.Dim
[25]   Print "Anzahl Elemente von 'a2DDateArray': ", a2DDateArray.Count
[26]   Print "Anzahl Elemente von 'a2DDateArray': ", a2DDateArray.Bounds[0] ' Alternative
[27]
[28] End ' btnShowExample_Click() ```
• Ein (leeres) Array für Datumswerte 'a2DDateArray' vom Typ Date[] wird in der Zeile 3 erzeugt.
• In der Zeile 6 wird Platz für 10 Elemente auch vom Daten-Typ Date[] dynamisch reserviert.
• In den beiden FOR-NEXT-Kontroll-Strukturen (Zeilen 8 bis 14) werden Date[]-Arrays erzeugt (Zeile 9), die Anzahl der Elemente im Date[]-Array mit der Resize(..)-Methode ★★ auf 5 festgelegt und jeweils mit 5 unterschiedlichen Datumswerten gefüllt.
• In den Zeilen 17 bis 22 wird jedes Element vom Array 'a2DDateArray' ausgelesen und danach werden die 5 Datumswerte – die in jedem Element gespeichert sind – ausgelesen und gruppiert angezeigt. Dafür sorgen die Zeilen 19 und 20.

Ausgabe in der IDE-Konsole:

```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 von 'a2DDateArray':           1

Anzahl Elemente von 'a2DDateArray':     10
Anzahl Elemente von 'a2DDateArray':     10 ' Alternative```

Die Struktur der gruppierten Anzeige entspricht auch der Speicher-Struktur im Array 'a2DDateArray', da Sie zum Beispiel auf das 4. Datum im 7. Element so zugreifen können:

`Print Format(a2DDateArray[6][3], "dd. mm yyyy")`

Beachten Sie, dass sowohl 'a2DDateArray' als auch alle Arrays 'a2DDateArray[i]' (→ Zeile 9) mit dem Index i aus dem Intervall von 0 bis 9 eindimensionale Arrays sind und Sie deshalb die Möglichkeit haben, die Dimension zur Laufzeit zu ändern! In den Zeilen * und ** wird das auch praktiziert, was Ihnen mit der folgenden (statischen) Deklaration nicht möglich wäre:

`Dim a2DDateArray As New Date[10][5] `

Auf das (Hilfs-)Array 'myArray' könnten Sie verzichten, wenn Sie den Quelltext für die Ausgabe so ändern:

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

Dynamische Arrays von Strukturen werden zur Zeit nicht unterstützt (→ Kapitel 7.2.1.2 Arrays von Strukturen), weil 'Struct' als strukturierter Daten-Container gedacht ist. Wenn Sie dynamische Arrays brauchen, dann verwenden Sie eine Klasse statt einer Struktur, denn in Gambas können Sie von jeder Klasse einen dynamischen Array-Typ ableiten.

Struktur:

```Public Struct Schueler
JGS As Integer
GebDatum As Date
Nachname As String
DG1Kurs As String
DG2Kurs As String
End Struct```

Quelltext CDS.class:

```' Gambas class file

' Diese Klasse ist eine (reine) Datenstruktur ohne eigene Methoden.
' Sie repräsentiert zum Beispiel einen Datensatz

Public JGS As Integer
Public GebDatum As Date
Public Nachname As String
Public DG1Kurs As String
Public DG2Kurs As String```

Im Hauptprogramm können Sie durch CDS[] einen dynamischen Array-Typ erzeugen, dessen Elemente Objekte vom Typ CDS sind → Kapitel 7.4.3.2 Abgeleitete Arrays. Sie können mit diesem abgeleiteten Array so arbeiten, wie Sie es auch von den Strukturen gewohnt sind – jedoch ohne die (statischen) Schranken einer Struktur.

Artikel

The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.