Kursinhalt
Einführung in Golang
Einführung in Golang
Länge vs. Kapazität
Wir können die Länge eines Arrays oder eines Slices mit der len
-Funktion bestimmen:
index
randomNumbers := [] int { 1, 4, 5, 7, 9, 10, 12 } fmt.Println(len(randomNumbers)) // Output: 7 numbersSlice := randomNumbers[2:7] fmt.Println(len(numbersSlice)) // Output: 5
Wir können die Kapazität eines Arrays oder eines Slices mit der cap
Funktion bestimmen:
Die Länge und Kapazität eines Arrays sind immer gleich. Bei einem Slice kann die Kapazität jedoch von der Länge abweichen. Zum Beispiel, wenn ein Slice aus einem Array erstellt wird, ist die Kapazität größer als die Länge:
index
randomNumbers := [7] int { 1, 4, 5, 7, 9, 10, 12 } numbersSlice := randomNumbers[1:3] fmt.Println(len(numbersSlice)) // Output: 2 fmt.Println(cap(numbersSlice)) // Output: 6
Die Kapazität eines Slice ist die Anzahl der Elemente vom startingIndex
des Slice bis zum Ende des ursprünglichen Arrays, aus dem es erstellt wurde. Im obigen Beispiel beträgt sie 6
.
Denken Sie daran, dass das Ändern eines Slice auch das ursprüngliche Array verändert. Daher wird im gegebenen Beispiel durch das Anhängen eines Elements (oder Wertes) an ein Slice im Wesentlichen das Element neben dem Endindex des Slice im ursprünglichen Array aktualisiert. Mit anderen Worten, es erhöht die Größe des Slice und aktualisiert die Elemente des ursprünglichen Arrays basierend auf den angehängten Elementen/Werten. Dies wird mit einem Beispiel deutlicher:
index
randomNumbers := [7] int { 1, 4, 5, 7, 9, 10, 12 } numbersSlice := randomNumbers[1:3] fmt.Println(randomNumbers) // Output: [1 4 5 7 9 10 12] numbersSlice = append(numbersSlice, 20, 30, 40) fmt.Println(randomNumbers) // Output: [1 4 5 20 30 40 12]
Die Kapazität ist nützlich, um zu bestimmen, wie viele Elemente wir dem Slice hinzufügen können. Wenn wir die Kapazität des Slice überschreiten, erstellt und gibt die append
-Funktion ein neues Slice zurück, das nicht mehr mit einem Teil des ursprünglichen Arrays verbunden ist. Daher wird es vom ursprünglichen Array getrennt.
Sie können das folgende Beispiel sehen: Das ursprüngliche Array bleibt unverändert, obwohl wir mehr Elemente zu seinem Slice hinzugefügt haben:
index
numbers := [] int { 1, 2, 3, 4 } numSlice := numbers[1:3] fmt.Println(numbers) // Outputs: [1 2 3 4] fmt.Println(numSlice) // Outputs: [2 3] fmt.Println(cap(numSlice)) // Outputs: 3 numSlice = append(numSlice, 9, 10) fmt.Println(numSlice) // Outputs: [2 3 9 10] fmt.Println(numbers) // Outputs: [1 2 3 4]
Dies geschah, weil das Slice eine Kapazität von 3 hatte, die wir überschritten haben. Infolgedessen gab die append
-Funktion ein neues Slice zurück, das nicht mehr auf das ursprüngliche Array verweist.
Danke für Ihr Feedback!