7.4.4 Eindimensionale und mehrdimensionale Arrays – Array-Dimensionen

Wenn man als Kriterium die Anzahl der Dimensionen eines Arrays zugrunde legt, so kann man ein- und mehrdimensionale Arrays unterscheiden.

Ein Array bezeichnet man als

Die Anzahl der Dimensionen eines Arrays muss bei der Kompilierung festgelegt sein. Die Größe der Dimension können Sie direkt oder durch einen beliebigen numerischen Ausdruck festlegen.

Beispiele

Eindimensionale Arrays:

Dim myArrayS As New String[3] 
Dim myArrayF As New Float[] 

Echt mehrdimensionale Arrays:

Dim myArray As String[10, 5] ' → FEHLER! New fehlt
Dim a2DArrayB As New String[10, C_MAX * 5] 
Dim a3DArray as New Integer[8, 8, 8]
Dim myArray4 As New String[10, 5]    *

Eine Alternative zur letzten Zeile sind die folgenden 2 Zeilen:

Dim myArray4 As New String[]  
myArray4 = New String[10, 5] **

In beiden Fällen ★ und ★★ werden die beiden Dimensionen statisch festgelegt und können zur Laufzeit nicht mehr geändert werden!

Abgeleitete eindimensionale Arrays:

Dim aLabels As New Label[] 
Dim aArrayComponents As New Components[]
Dim aClassArray As New CDS[] ' Array, dessen Elemente CDS-Objekte der Klasse CDS sind

Abgeleitetes mehrdimensionales Array:

Dim aLabels As New Label[][]

Beispiel 1 – Einsatz eines eindimensionalen, abgeleiteten Arrays

Das eingesetzte Array 'aLabels' ist einerseits eindimensional und anderseits ein abgeleitetes Array, weil 'Label' eine Klasse ist.

[1] Public Sub btnShowLabels_Click() 
[2]   Dim aLabels As New Label[] 
[3]   Dim hControl As Control 
[4]   Dim iCount As Integer 
[5]   
[6]   If aLabels <> Null And aLabels.Count = 0 Then 
[7]      Message.Info("Das Array 'aLabels' existiert - ist aber leer.") 
[8]   Endif   
[9] 
[10]   For Each hControl In ME.Children    
[11]     If Object.Type(hControl) = "Label" Then aLabels.Add(hControl) 
[12]   Next ' hControl 
[13]       
[14]   For iCount = 0 To aLabels.Max 
[15]     aLabels[iCount].Tag = Str(iCount) 
[16]     Print "Label-Name = "; aLabels[iCount].Name; 
[17]     Print " | Label-Text = "; aLabels[iCount].Text; 
[18]     Print " | Label-Tag = "; aLabels[iCount].Tag 
[19]   Next ' iCount 
[20] 
[21] End ' btnShowLabels_Click() 

Ausgabe in der IDE-Konsole:

Label-Name = lblCArray     | Label-Text = LabelArrays | Label-Tag = 0 
Label-Name = lblACaption   | Label-Text = Demonstration Klasse ARRAY | Label-Tag = 1 
Label-Name = lblMultiArray | Label-Text = Label1 | Label-Tag = 2 
Label-Name = lblBArray     | Label-Text = Class Array | Label-Tag = 3

Kommentare:

Im Zusammenhang mit Untersuchungen zu den Dimensionen von mehrdimensionalen Arrays leistet die virtuelle Klasse Array.Bounds gute Dienste, wie das folgende Beispiel zeigt:

[1] Dim k As Integer
[2] Dim a2DArray As New String[10, 5]
[3] 
[4] ' Statische Anzeige der Dimensionen 
[5]   Print "Dimension = "; a2DArray.Dim ' Anzahl der Dimensionen
[6]   Print "Dimension 1 (Anzahl Zeilen)  = "; a2DArray.Bounds[0]
[7]   Print "Dimension 2 (Anzahl Spalten) = "; a2DArray.Bounds[1]
[8]   
[9]   Print "Dimension = "; a2DArray.Dim
[10]   Print "DIM-Count = "; a2DArray.Bounds.Count ' Anzahl der Elemente im Bounds-Arrays
[11] 
[12] ' Dynamische Anzeige der Grenzen der einzelnen Dimensionen
[13]   For k = 0 To a2DArray.Bounds.Count - 1
[14]     Print "Dimension "; k + 1; " = "; a2DArray.Bounds[k]
[15]   Next

Ausgabe in der IDE-Konsole:

Dimension = 2
Dimension 1 (Anzahl Zeilen)  = 10
Dimension 2 (Anzahl Spalten) = 5

Dimension = 2
DIM-Count = 2

Dimension 1 = 10
Dimension 2 = 5

Kommentare:

Exkurs – Ergänzende Bemerkungen zu mehrdimensionalen Arrays:

  1. Die Anzahl der Dimensionen ist auf 8 nach oben beschränkt.
  2. Die Ausdehnung einer jeden Dimension ist statisch.
  3. Sie können nur Matrizen bilden.

Was den Punkt (3) betrifft, so ist er wohl der subtilste unter den dreien. Abgeleitete mehrdimensionale Arrays erlauben es, Systeme zu erstellen, in denen eine Dimension nicht überall gleichmäßig ausgedehnt sein muss – wovon Matrizen ein Spezialfall sind – denn dort muss gerade das gelten.

Download