4.5 Datenfelder
Man verwendet Datenfelder, um eine größere Menge zusammengehöriger Daten des gleichen Datentyps mit dem gleichen Variablennamen anzusprechen und zu speichern. Datenfelder können ein- oder mehrdimensional sein.
Im Zusammenhang mit Feldern werden häufig Schleifen eingesetzt. Diese ermöglichen es, alle Elemente eines Felds anzusprechen.
4.5.1 Eindimensionale Datenfelder
Im nachfolgenden Beispiel im Projekt DatenfeldEindimensional werden sieben Werte aus einer Reihe von Temperaturmessungen in einem Feld vom Typ Integer gespeichert und in einem Listenfeld ausgegeben, siehe Abbildung 4.16.
Abbildung 4.16 Eindimensionales Feld
Der Programmcode:
Public Class Form1
Private Sub Form1_Load(...) Handles MyBase.Load
Randomize()
End Sub
Private Sub cmdAnzeigen1_Click(...) Handles ...
Dim T(6) As Integer
Dim i As Integer
lstFeld.Items.Clear()
For i = 0 To 6
T(i) = Rnd() * 10 + 20
lstFeld.Items.Add(T(i))
Next i
End Sub
End Class
Listing 4.12 Projekt »DatenfeldEindimensional«, Feld erzeugen
Zur Erläuterung:
- Die Werte sollen per Zufallsgenerator ermittelt werden. Daher wird der Zufallsgenerator in der Prozedur Form1_Load() initialisiert.
- Mit der Anweisung Dim T(6) As Integer wird ein eindimensionales Feld mit sieben (!) Elementen deklariert. Jedes einzelne Element entspricht einer einzelnen Integer-Variablen.
- Sie können ein Feld nicht mit einem anderen Startindex als 0 erzeugen. Die Deklaration Dim T(10 To 15) As Integer ist daher nicht möglich.
- Die einzelnen Elemente werden durch eine laufende Nummer, den sogenannten Index, voneinander unterschieden. Der Index beginnt immer bei 0. Das erste Element des Felds hat die Bezeichnung T(0), das nächste T(1) usw. bis T(6).
- Es können Felder aller bereits genannten Datentypen deklariert werden.
- Das Listenfeld wird zunächst gelöscht. Dies ist sinnvoll, falls man den Button mehrmals hintereinander betätigt.
- Innerhalb einer For-Schleife wird jedem Element des Felds ein Wert zugewiesen. Innerhalb der Schleife wird das aktuelle Element mit T(i) angesprochen, da die Schleifenvariable i die Werte von 0 bis 6 durchläuft, die als Index benötigt werden.
- Der Wert für das Feldelement wird per Zufallsgenerator ermittelt. Dieser liefert Zahlen (mit Nachkommastellen) zwischen 0 und 1. Multipliziert man diese mit 10, so ergeben sich Zahlen zwischen 0 und 10. Addiert man 20 hinzu, erhält man Zahlen zwischen 20 und 30. Da diese Zahlen einer Integer-Variablen zugewiesen werden, werden die Nachkommastellen abgeschnitten und es ergeben sich ganze Zahlen zwischen 20 und 30.
- Mit der Methode Add() der Eigenschaft Items des Listenfelds werden diese Zahlen einem Listenfeld hinzugefügt, sodass nach dem Ablauf der Ereignisprozedur alle Elemente des Felds im Listenfeld angezeigt werden.
Hinweis: Ein typischer Laufzeitfehler im Zusammenhang mit Feldern ist die Benutzung eines Index, der außerhalb des Feldes liegt. Es folgt dann eine Ausnahme vom Typ IndexOutOfRangeException.
4.5.2 Ein Feld durchsuchen
Im folgenden Beispiel geht es um eine typische Operation mit einem Feld: Sie möchten wissen, welches das größte und welches das kleinste Element des Felds ist (Maximum bzw. Minimum). Dies soll mithilfe des nachfolgenden Programms (ebenfalls im Projekt DatenfeldEindimensional) ermittelt werden, siehe Abbildung 4.17.
Abbildung 4.17 Maximum und Minimum
Der zugehörige Code:
Public Class Form1
[...]
Private Sub cmdAnzeigen2_Click(...) Handles ...
Dim T(6) As Integer
Dim MaxWert, MinWert As Integer
Dim i, MaxWertIndex, MinWertIndex As Integer
' Feld füllen
lstFeld.Items.Clear()
For i = 0 To 6
T(i) = Rnd() * 10 + 20
lstFeld.Items.Add(T(i))
Next i
' Max/Min initialisieren
MaxWert = T(0)
MinWert = T(0)
MaxWertIndex = 0
MinWertIndex = 0
' Max/Min suchen
For i = 0 To 6
If T(i) > MaxWert Then
MaxWert = T(i)
MaxWertIndex = i
End If
If T(i) < MinWert Then
MinWert = T(i)
MinWertIndex = i
End If
Next i
' Max/Min ausgeben
lblAnzeige.Text = "Max. Wert: " & MaxWert &
" bei Index " & MaxWertIndex & vbCrLf &
"Min. Wert: " & MinWert &
" bei Index " & MinWertIndex
End Sub
End Class
Listing 4.13 Projekt »DatenfeldEindimensional«, Maximum, Minimum
Zur Erläuterung:
- Es sind insgesamt vier Variablen vorgesehen, die den größten und den kleinsten Wert sowie deren Feld-Indizes speichern sollen.
- Nach dem Füllen und Anzeigen des Felds werden die oben angegebenen vier Variablen initialisiert. Es werden die Werte des ersten Feld-Elements als größtes und als kleinstes Element vorbesetzt. Dessen Index (also 0) wird als Index des größten und als Index des kleinsten Elements vorbesetzt.
- Anschließend wird das restliche Feld (ab Index 1) untersucht. Wenn eines der Elemente größer ist als das bisherige Maximum, dann haben wir ein neues Maximum. Wert und Index des neuen Maximums werden gespeichert. Die analoge Operation wird für das Minimum durchgeführt.
- Zum Abschluss werden die ermittelten Werte und ihre Indizes ausgegeben.
4.5.3 Weitere Feld-Operationen
Visual Basic stellt für Datenfelder automatisch eine Reihe von Möglichkeiten (über die Klasse Array) zur Verfügung. Diese werden teilweise über den Namen des Felds, teilweise auch über den Klassennamen selber (Array) aufgerufen.
Als Beispiel für die zahlreichen Möglichkeiten soll im nachfolgenden Programm (ebenfalls im Projekt DatenfeldEindimensional) ein Feld geklont werden. Anschließend wird das geklonte Feld sortiert und nach einem bestimmten Wert durchsucht, siehe Abbildung 4.18.
Abbildung 4.18 Wert gesucht und gefunden
Der Programmcode:
Public Class Form1
[...]
Private Sub cmdAnzeigen3_Click(...) Handles ...
Dim T(6), U(6) As Integer
Dim SuchIndex As Integer
Dim i As Integer
For i = 0 To 6
T(i) = Rnd() * 10 + 20
Next i
U = T.Clone()
Array.Sort(U)
lstFeld.Items.Clear()
For i = 0 To 6
lstFeld.Items.Add(U(i))
Next i
SuchIndex = Array.IndexOf(U, 25)
lblAnzeige.Text = "Gesuchter Wert 25" &
" bei Index: " & SuchIndex
End Sub
End Class
Listing 4.14 Projekt »DatenfeldEindimensional«, Feld-Operationen
Zur Erläuterung:
- Es wird ein zweites Feld U mit der gleichen Größe wie das Originalfeld T deklariert.
- Die Methode Clone() dient zum Kopieren eines ganzen Felds. Anschließend stehen im Feld U die gleichen Werte wie im Feld T zur Verfügung.
- Hinweis: Die einfache Zuweisung U = T dient nicht zum Kopieren des Feldes T. Stattdessen wäre damit nur ein zweiter Verweis auf das Feld T zur Verfügung gestellt worden.
- Die Methode Sort() der Klasse Array wird zur aufsteigenden Sortierung des Felds U genutzt.
- Die Elemente des sortierten Felds werden ausgegeben.
- Die Methode IndexOf() der Klasse Array liefert zu einem Suchwert (25) den ersten Index im Suchfeld U. Dies ist die Position, bei der der gesuchte Wert erstmalig im Feld gefunden wird. Falls der Wert nicht existiert, wird –1 zurückgegeben, siehe Abbildung 4.19.
Abbildung 4.19 Wert gesucht und nicht gefunden
4.5.4 Mehrdimensionale Datenfelder
Haben Sie nicht nur sieben Temperaturwerte, die Sie speichern möchten, sondern wurden die Temperaturwerte darüber hinaus an drei verschiedenen Orten aufgenommen, so bietet sich ein zweidimensionales Feld an. Die Elemente eines solchen Feldes werden über zwei Indizes angesprochen. Der erste Index steht für die laufende Nummer der Messung, der zweite Index für den Ort, an dem die Messung durchgeführt wurde.
Das nachfolgende Programm im Projekt DatenfeldMehrdimensional, bei dem die Werte eines Ortes jeweils in einem eigenen Listenfeld angezeigt werden, veranschaulicht dies, siehe Abbildung 4.20.
Abbildung 4.20 Zweidimensionales Feld
Der zugehörige Code:
Public Class Form1
Private Sub Form1_Load(...) Handles MyBase.Load
Randomize()
End Sub
Private Sub cmdAnzeige_Click(...) Handles ...
Dim T(6, 2) As Integer
Dim i, k As Integer
lstSpalte0.Items.Clear()
lstSpalte1.Items.Clear()
lstSpalte2.Items.Clear()
For i = 0 To 6
For k = 0 To 2
T(i, k) = Rnd() * 10 + 20
Next k
lstSpalte0.Items.Add(T(i, 0))
lstSpalte1.Items.Add(T(i, 1))
lstSpalte2.Items.Add(T(i, 2))
Next i
End Sub
End Class
Listing 4.15 Projekt »DatenfeldMehrdimensional«, Feld erzeugen
Zur Erläuterung:
- In der Prozedur cmdAnzeige_Click() wird mit Dim T(6, 2) As Integer ein zweidimensionales Feld der Größe 7 x 3 Elemente vom Datentyp Integer deklariert. Der Index beginnt in jeder Dimension bei 0.
- Die drei Listenfelder werden zunächst gelöscht. Dies ist sinnvoll, wenn man den Button mehrmals hintereinander betätigt.
- Es folgen zwei geschachtelte For-Schleifen. Geschachtelte Schleifen bestehen aus einer äußeren und einer inneren Schleife. Die äußere Schleife arbeitet hier mit der Schleifenvariablen i, die von 0 bis 6 läuft. Die innere Schleife arbeitet hier mit der Schleifenvariablen k, die von 0 bis 2 läuft.
- Eine solche geschachtelte Schleife hat folgenden Ablauf: i erhält den Wert 0, k durchläuft dann die Werte 0 bis 2, dann erhält i den Wert 1, und k erhält wieder die Werte von 0 bis 2 usw.
- Auf diese Weise werden alle 21 Elemente des zweidimensionalen Felds erreicht. Das jeweils aktuelle Element T(i,k) erhält seinen Wert wieder über den Zufallsgenerator.
- Anschließend werden die drei neuen Werte ihren jeweiligen Listenfeldern mit Items.Add() hinzugefügt.
- Das Feld wird auf diese Weise vollständig erzeugt und angezeigt.
Wählt der Benutzer eines der Elemente per Mausklick an, so werden dessen Indizes in einem Label angezeigt, siehe Abbildung 4.21.
Abbildung 4.21 Indizes des ausgewählten Elements
Zur Anzeige der Indizes dienen die drei folgenden Prozeduren (ebenfalls im Projekt DatenfeldMehrdimensional):
Public Class Form1
[...]
Private Sub lstSpalte0_Click(...) Handles ...
lstSpalte1.SelectedIndex = –1
lstSpalte2.SelectedIndex = –1
lblAnzeige.Text = "Indizes: " &
lstSpalte0.SelectedIndex & ", 0"
End Sub
Private Sub lstSpalte1_Click(...) Handles ...
lstSpalte0.SelectedIndex = –1
lstSpalte2.SelectedIndex = –1
lblAnzeige.Text = "Indizes: " &
lstSpalte1.SelectedIndex & ", 1"
End Sub
Private Sub lstSpalte2_Click(...) Handles ...
lstSpalte0.SelectedIndex = –1
lstSpalte1.SelectedIndex = –1
lblAnzeige.Text = "Indizes: " &
lstSpalte2.SelectedIndex & ", 2"
End Sub
End Class
Listing 4.16 Projekt »DatenfeldMehrdimensional«, Indizes anzeigen
Zur Erläuterung:
- Bei einem Mausklick auf ein Element der ersten Liste werden zunächst eventuell vorhandene Markierungen in der zweiten oder dritten Liste entfernt, indem Sie die Eigenschaft SelectedIndex der beiden Listen jeweils auf –1 setzen.
- Anschließend werden der Index des markierten Elements und der Index des Listenfelds (0, 1 oder 2) im Label angezeigt.
Weitere Möglichkeiten:
- Wie bereits erwähnt, können ein- oder mehrdimensionale Felder beliebiger Datentypen deklariert werden.
- Haben Sie nicht nur sieben Messungen an drei Orten, sondern auch noch Messungen an z. B. 31 Tagen, so benötigen Sie eine dritte Dimension. Die Deklaration sähe dann wie folgt aus: Dim T(6, 2, 30) As Integer. Es ergeben sich also 7 x 3 x 31 Elemente.
- Dieses Beispiel lässt sich leicht erweitern: Wie bisher haben wir sieben Messungen an drei Orten an 31 Tagen. Es wird aber jeweils nicht nur die Temperatur, sondern auch die Windrichtung, die Windgeschwindigkeit und die Luftfeuchtigkeit gemessen. Dazu benötigen Sie ein vierdimensionales Feld, das wie folgt deklariert wird: Dim T(6, 2, 30, 3) As Integer (oder besser: As Single).
- Sie sehen, dass Datenfelder nahezu unbegrenzte Möglichkeiten zur Speicherung und Verarbeitung größerer Datenmengen bieten. Der Begriff Speicherung ist hier natürlich nur bedingt, nämlich für die Speicherung während der Verarbeitung zu verstehen. Für eine dauerhafte Speicherung auf Festplatte benötigen Sie Dateien (siehe Abschnitt 6.3) oder besser noch Datenbanken (siehe Kapitel 8, »Datenbank-Anwendungen mit ADO.NET«).
Übung
Schreiben Sie ein Programm, in dem den Elementen eines eindimensionalen Feldes, das 10 Integer-Werte beinhaltet, zufällige Werte zugewiesen werden. Anschließend sollen alle Positionen des kleinsten Feldelements ermittelt und ausgegeben werden, wie in Abbildung 4.22.
Abbildung 4.22 Übung ÜDatenfeldEindimensional
Übung
Schreiben Sie ein Programm, in dem den Elementen eines dreidimensionalen Feldes, das 6 × 3 × 4 Integer-Werte beinhaltet, zufällige Werte zugewiesen werden. Anschließend sollen alle Positionen des kleinsten Elements des Feldes ermittelt und ausgegeben werden, wie in Abbildung 4.23.
Abbildung 4.23 Übung ÜDatenfeldMehrdimensional
4.5.5 Datenfelder initialisieren
Datenfelder können auch direkt bei ihrer Erzeugung mit Werten besetzt werden. Statt der Größe der einzelnen Dimensionen gibt man die Elemente an. Für jede Dimension wird dabei ein Paar geschweifter Klammern { } benötigt. Siehe hierzu das folgende Beispiel (ebenfalls im Projekt DatenfeldMehrdimensional):
Public Class Form1
[...]
Private Sub cmdInit_Click(...) Handles ...
Dim T() As Integer = {0, 5, –2, 7}
Dim U(,) As Integer =
{{6, 2, 8}, {9, 6, –3}}
Dim V(,,) As Integer =
{{{9, –3, 2}, {2, 1, –5}},
{{3, 9, 8}, {6, 3, –8}}}
lblAnzeige.Text = U(1, 2) & ", " & V(1, 1, 2)
End Sub
End Class
Listing 4.17 Projekt »DatenfeldMehrdimensional«, Initialisierung
Zur Erläuterung:
- Das Feld T ist eindimensional und hat vier Elemente. Die einzelnen Elemente werden durch Kommata voneinander getrennt. Das gesamte Feld steht innerhalb eines Paares geschweifter Klammern. Das erste Element hat den Index 0 usw.
- Das Feld U ist zweidimensional und hat 2 Zeilen × 3 Spalten mit insgesamt 6 Elementen. Die Elemente einer Zeile stehen in geschweiften Klammern. Die beiden Zeilen des Feldes sind durch ein Komma voneinander getrennt. Das gesamte Feld steht wiederum in geschweiften Klammern. Angezeigt wird der letzte Wert der letzten Zeile: –3.
- Das Feld V ist dreidimensional und hat 2 Ebenen × 2 Zeilen × 3 Spalten mit insgesamt 12 Elementen. Pro Dimension kommen weitere Paare geschweifter Klammern hinzu. Mit der Anzahl an Dimensionen wird die Zuordnung der Werte zu den Feldelementen auf diese Weise zunehmend schwieriger. Empfehlenswert ist daher eher die explizite Zuordnung durch einzelne Zuweisungen. Angezeigt wird der letzte Wert der letzten Zeile der letzten Ebene: –8.
4.5.6 Datenfelder sind dynamisch
Steht zum Zeitpunkt des Programmstarts noch nicht fest, wie viele Variablen in einem Feld gespeichert werden sollen, können Sie auch dafür sorgen, dass sich die Größe zur Laufzeit verändern lässt.
Die Größenveränderung (Redimensionierung, Schlüsselwort ReDim) kann mehrmals geschehen. Mithilfe von Preserve vereinbaren Sie, dass die bereits vorhandenen Werte erhalten bleiben sollen.
Im folgenden Beispiel wird ein Feld mit klassenweiter Gültigkeit deklariert und ausgegeben, siehe Abbildung 4.24. Seine gewünschte Größe kann anschließend vom Benutzer mit (siehe Abbildung 4.25) oder ohne (siehe Abbildung 4.26) Preserve geändert werden (Projekt DatenfeldDynamisch).
Abbildung 4.24 Feld in ursprünglicher Größe
Abbildung 4.25 Vergrößerung auf zehn Elemente, mit Preserve
Abbildung 4.26 Vergrößerung auf zehn Elemente, ohne Preserve
Der Programmcode:
Public Class Form1
Dim T(6) As Integer
Private Sub Form1_Load(...) Handles MyBase.Load
Randomize()
End Sub
Private Sub cmdOriginal_Click(...) Handles ...
Dim i As Integer
lstFeld.Items.Clear()
For i = 0 To 6
T(i) = Rnd() * 10 + 20
lstFeld.Items.Add(T(i))
Next i
End Sub
Private Sub cmdNeu_Click(...) Handles ...
If optMitPreserve.Checked Then
ReDim Preserve T(numGröße.Value – 1)
Else
ReDim T(numGröße.Value – 1)
End If
lstFeld.Items.Clear()
For i = 0 To T.GetUpperBound(0)
lstFeld.Items.Add(T(i))
Next i
End Sub
End Class
Listing 4.18 Projekt »DatenfeldDynamisch«
Zur Erläuterung:
- Das Feld T wird zunächst original klassenweit gültig mit sieben Elementen deklariert, damit es in allen Prozeduren zur Verfügung steht.
- Die aktuelle Anzahl der Elemente wird im Zahlenauswahlfeld angezeigt. Dieses Feld ist hier auf die Eigenschaftswerte Minimum = 1 bzw. Maximum = 30 begrenzt. Ein Feld mit weniger als einem Element ergibt keinen Sinn.
- In der Prozedur cmdOriginal_Click() wird das Feld gefüllt und ausgegeben.
- In der Prozedur cmdNeu_Click() wird zunächst geprüft, ob die Größenänderung mit Preserve oder ohne Preserve erfolgen soll.
- Hat der Benutzer mit Preserve gewählt, so wird der eingestellte Wert des Zahlenauswahlfelds (Eigenschaft Value) ermittelt. Das Feld T wird in der gewünschten Größe mit der Anweisung ReDim Preserve T(numGröße.Value – 1) geändert und neu angezeigt.
- Zur Anzeige wird wiederum eine Schleife verwendet. Diese Schleife läuft von 0 bis T.GetUpperBound(0). Die Methode GetUpperBound() ermittelt den größten Index eines Feldes für die angegebene Dimension. Bei einem eindimensionalen Feld gibt es ausschließlich die Dimension 0. Da die Feldgröße durch den Benutzer eingestellt wurde, ist sie zur Entwicklungszeit unbekannt und muss auf diese Weise ermittelt werden.
- Wurde das Feld vergrößert, so werden die bereits vorhandenen Werte, ergänzt um die Werte der neuen Elemente, angezeigt. Den neuen Elementen wurde noch kein Wert zugewiesen, daher haben sie den Wert 0.
- Wenn das Feld verkleinert wurde, dann werden nur noch die Werte der verbliebenen Elemente angezeigt. Die restlichen Elemente wurden gelöscht.
- Wenn der Benutzer ohne Preserve gewählt hat, dann wird das Feld ebenfalls in seiner neuen Größe angezeigt. Alle Elemente haben den Wert 0, die Originalwerte sind verloren.
4.5.7 Collections initialisieren
Collections ist ein Oberbegriff für Datenstrukturen, die mehrere Variablen bzw. Objekte umfassen. Die in den vorherigen Abschnitten behandelten Datenfelder gehören ebenfalls zu den Collections. Mit Visual Basic 2010 wurde eine vereinfachte Vorgehensweise zur Initialisierung von Collections eingeführt.
Dies soll im Projekt CollectionInitialisierer mithilfe einiger Datenfelder erläutert werden. Es ist nun möglich, sowohl die Größe als auch den Datentyp der Datenstruktur implizit, also mithilfe der gelieferten Werte, festzulegen.
Public Class Form1
Private Sub cmdAnzeige_Click(...) Handles ...
Dim It = {3, 4, 5}
Dim Db = {3.2, 4, 5.8}
Dim St = {"Bern", "Genf", "Lausanne"}
Dim Gem = {5, 6.2, "Basel"}
Dim ZweiDim = {{3, 4, 5}, {8, 7, 6}}
Dim i, j As Integer
lblA.Text = ""
For i = 0 To It.Count – 1
lblA.Text &= "It(" & i & "): " &
It(i) & vbCrLf
Next
For i = 0 To Db.Count – 1
lblA.Text &= "Db(" & i & "): " &
Db(i) & vbCrLf
Next
For i = 0 To St.Count – 1
lblA.Text &= "St(" & i & "): " &
St(i) & vbCrLf
Next
For i = 0 To Gem.Count – 1
lblA.Text &= "Gem(" & i & "): " &
Gem(i) & vbCrLf
Next
For i = 0 To ZweiDim.GetUpperBound(0)
For j = 0 To ZweiDim.GetUpperBound(1)
lblA.Text &=
"ZweiDim(" & i & "," & j & "): " &
ZweiDim(i, j) & vbCrLf
Next j
Next i
End Sub
End Class
Listing 4.19 Projekt »CollectionInitialisierer«
Zur Erläuterung:
- Das Datenfeld It hat drei Elemente und wird als Feld vom Datentyp Integer erkannt, da innerhalb der geschweiften Klammern nur ganze Zahlen stehen.
- Das Datenfeld Db wird als Feld vom Datentyp Double erkannt, da innerhalb der geschweiften Klammern nur Zahlen stehen, davon mindestens eine Zahl mit Nachkommastellen.
- Das Datenfeld St wird als Feld vom Datentyp String erkannt, da innerhalb der geschweiften Klammern mindestens eine Zahl mit Nachkommastellen steht.
- Das Datenfeld Gem wird als Feld vom Datentyp Object erkannt. Dies ist der Datentyp, der allen Datentypen zugrunde liegt. Da sowohl Zahlen als auch Zeichenketten innerhalb der geschweiften Klammern stehen, wird dieser Datentyp gewählt.
- Mit einem Datenfeld vom Typ Object ist es also möglich, Daten unterschiedlichen Typs in einem Feld zu vereinigen. Allerdings wird die Verarbeitung der Daten erschwert, da die jeweiligen datentyp-spezifischen Operationen nur über einen Umweg bereit stehen.
- Mehrdimensionale Felder sind ebenfalls möglich, wie das Feld ZweiDim zeigt. Die Initialisierung des zweidimensionalen Datenfeldes vom Typ Integer gelingt mit geschachtelten, geschweiften Klammern, ähnlich wie in Abschnitt 4.5.5 gezeigt.
Die Ausgabe wird in Abbildung 4.27 gezeigt.
Abbildung 4.27 Collections initialisieren
4.5.8 For-Each-Schleife
Im Zusammenhang mit Collections können Sie auch die For...Each-Schleife anwenden. Ein Beispiel, ebenfalls im Projekt CollectionInitialisierer:
Public Class Form1
[...]
Private Sub cmdAnzeige2_Click(...) Handles ...
Dim Db = {3.2, 4, 5.8}
Dim DbZahl As Double
lblA.Text = ""
For Each DbZahl In Db
lblA.Text &= "DbZahl: " & DbZahl
DbZahl = DbZahl + 10
lblA.Text &= ", verändert: " & DbZahl & vbCrLf
Next
For i = 0 To Db.Count – 1
lblA.Text &= "Db(" & i & "): " &
Db(i) & vbCrLf
Next
End Sub
End Class
Listing 4.20 Projekt »CollectionInitialisierer«, For-Each-Schleife
Zur Erläuterung:
- Bei der Ausgabe wird als Alternative diesmal die For-Each-Schleife verwendet. Ein einzelnes Element der Collection Db wird in die Variable DbZahl kopiert. Diese wird anschließend ausgegeben.
- Sie können in Abbildung 4.28 erkennen, dass es eine Kopie ist, denn eine Veränderung der Variablen DbZahl hat keine Veränderung des entsprechenden Elements aus der Collection Db zur Folge.
Abbildung 4.28 For-Each-Schleife
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.