Übung: Verwenden von Arrays
Arrays in Go sind Datenstrukturen eines bestimmten Typs mit fester Länge. Diese können null oder mehr Elemente enthalten, und Sie müssen die Größe definieren, wenn Sie sie deklarieren oder initialisieren. Außerdem kann deren Größe nach der Erstellung nicht mehr geändert werden. Aus diesen Gründen werden Arrays nicht allzu häufig in Go-Programmen verwendet, aber sie bilden die Grundlage für Slices und Zuordnungen.
Deklarieren von Arrays
Sie müssen zum Deklarieren von Arrays in Go den Datentyp der zugehörigen Elemente und die Anzahl der Elemente definieren, die das Array enthalten kann. Anschließend können Sie auf jedes Element im Array mit der Indexnotation zugreifen, wobei Null (0) das erste Element und das letzte Element um eins kleiner als die Arraylänge (Länge -1) ist.
Verwenden Sie beispielsweise den folgenden Code:
package main
import "fmt"
func main() {
var a [3]int
a[1] = 10
fmt.Println(a[0])
fmt.Println(a[1])
fmt.Println(a[len(a)-1])
}
Wenn Sie den vorherigen Code ausführen, wird die folgende Ausgabe angezeigt:
0
10
0
Obwohl Sie ein Array deklariert haben, erhalten Sie keinen Fehler, wenn Sie auf dessen Elemente zugreifen. Standardmäßig initialisiert Go jedes Element mit dem Standarddatentyp. In diesem Fall ist int
der Standardwert für Null (0). Sie können einen Wert jedoch einer bestimmten Position zuweisen, genau so, wie wir es bei a[1] = 10
getan haben. Zudem können Sie unter Verwendung derselben Notation auf das Element zugreifen. Beachten Sie auch, dass zum Verweisen auf das erste Element a[0]
verwendet wurde. Um auf das letzte Element zu verweisen, haben wir a[len(a)-1]
verwendet. Die len
-Funktion ist eine in Go integrierte Funktion zum Abrufen der Anzahl von Elementen in einem Array, einem Slice oder einer Zuordnung.
Initialisieren von Arrays
Sie können auch ein Array mit anderen Werten als den Standardwerten initialisieren, wenn Sie ein Array deklarieren. Beispielsweise können Sie den folgenden Code verwenden, um die Syntax anzuzeigen und zu testen:
package main
import "fmt"
func main() {
cities := [5]string{"New York", "Paris", "Berlin", "Madrid"}
fmt.Println("Cities:", cities)
}
Führen Sie den vorangehenden Code aus, um die folgende Ausgabe zu erhalten:
Cities: [New York Paris Berlin Madrid ]
Obwohl das Array fünf Elemente enthalten sollte, müssen Sie keinem Element einen Wert zuweisen. Wie bereits erwähnt liegt an letzter Stelle eine leere Zeichenfolge vor, da dies der Standardwert für einen Zeichenfolgendatentyp ist.
Ellipse in Arrays
Eine andere Möglichkeit zum Deklarieren und Initialisieren eines Arrays, wenn Sie nicht wissen, wie viele Positionen Sie benötigen, Sie aber wissen, über welche Datenelemente Sie verfügen, besteht in der Verwendung von Ellipsen (...
). Beispiel:
q := [...]int{1, 2, 3}
Ändern Sie das im vorherigen Abschnitt verwendete Programm, um eine Ellipse zu verwenden. Der Code sollte wie in diesem Beispiel aussehen:
package main
import "fmt"
func main() {
cities := [...]string{"New York", "Paris", "Berlin", "Madrid"}
fmt.Println("Cities:", cities)
}
Führen Sie den vorangehenden Code aus, und es sollte eine ähnliche Ausgabe wie in diesem Beispiel angezeigt werden:
Cities: [New York Paris Berlin Madrid]
Erkennen Sie den Unterschied? Am Ende liegt keine leere Zeichenfolge vor. Die Arraylänge wurde durch die Zeichenfolge festgelegt, die Sie beim Initialisieren angegeben haben. Sie reservieren keinen Arbeitsspeicher, wenn Sie nicht wissen, ob Sie diesen überhaupt benötigen.
Eine weitere interessante Methode zum Initialisieren eines Arrays besteht darin, eine Ellipse zu verwenden und nur einen Wert für die letzte Position anzugeben. Verwenden Sie beispielsweise den folgenden Code:
package main
import "fmt"
func main() {
numbers := [...]int{99: -1}
fmt.Println("First Position:", numbers[0])
fmt.Println("Last Position:", numbers[99])
fmt.Println("Length:", len(numbers))
}
Führen Sie diesen Code aus, und Sie erhalten die folgende Ausgabe:
First Position: 0
Last Position: -1
Length: 100
Beachten Sie, dass die Länge des Arrays 100 ist, da Sie einen Wert für die 99. Position angegeben haben. Die erste Position gibt den Standardwert (0) aus.
Mehrdimensionale Arrays
Go bietet Unterstützung für mehrdimensionale Arrays, wenn Sie mit komplexen Datenstrukturen arbeiten müssen. Erstellen Sie ein Programm, in dem Sie ein zweidimensionales Array deklarieren und initialisieren. Verwenden Sie den folgenden Code:
package main
import "fmt"
func main() {
var twoD [3][5]int
for i := 0; i < 3; i++ {
for j := 0; j < 5; j++ {
twoD[i][j] = (i + 1) * (j + 1)
}
fmt.Println("Row", i, twoD[i])
}
fmt.Println("\nAll at once:", twoD)
}
Führen Sie das vorangehende Programm aus, und es sollte eine Ausgabe wie in diesem Beispiel angezeigt werden:
Row 0 [1 2 3 4 5]
Row 1 [2 4 6 8 10]
Row 2 [3 6 9 12 15]
All at once: [[1 2 3 4 5] [2 4 6 8 10] [3 6 9 12 15]]
Sie haben ein zweidimensionales Array deklariert, das angibt, wie viele Positionen das Array in der zweiten Dimension haben würde (z. B. var twoD [3][5]int
). Sie können sich dieses Array als eine Datenstruktur mit Spalten und Zeilen vorstellen, ähnlich einer Tabelle oder Matrix. An diesem Punkt verfügen alle Positionen über den Standardwert 0. In der for
-Schleife werden alle Positionen mit einem anderen Wertmuster in jeder Zeile initialisiert. Schließlich werden alle Werte im Terminal ausgegeben.
Was geschieht, wenn Sie ein dreidimensionales Array deklarieren möchten? Nun, Sie ahnen möglicherweise, wie die Syntax lautet. Sie können wie in diesem Beispiel vorgehen:
package main
import "fmt"
func main() {
var threeD [3][5][2]int
for i := 0; i < 3; i++ {
for j := 0; j < 5; j++ {
for k := 0; k < 2; k++ {
threeD[i][j][k] = (i + 1) * (j + 1) * (k + 1)
}
}
}
fmt.Println("\nAll at once:", threeD)
}
Führen Sie den vorangehenden Code aus, und es sollte eine Ausgabe wie in diesem Beispiel angezeigt werden:
All at once: [[[1 2] [2 4] [3 6] [4 8] [5 10]] [[2 4] [4 8] [6 12] [8 16] [10 20]] [[3 6] [6 12] [9 18] [12 24] [15 30]]]
Wenn die Ausgabe in ein besser lesbares Format formatiert wird, könnte dies wie im folgenden Beispiel aussehen:
All at once:
[
[
[1 2] [2 4] [3 6] [4 8] [5 10]
]
[
[2 4] [4 8] [6 12] [8 16] [10 20]
]
[
[3 6] [6 12] [9 18] [12 24] [15 30]
]
]
Beachten Sie, wie sich die Struktur von einem zweidimensionalen Array ändert. Sie können weiterhin mehr Dimensionen als benötigt verwenden, für dieses Beispiel ist dies aber ausreichend, da noch weitere Datentypen untersucht werden sollen.