Länge vs. Kapazität
Die Länge eines Arrays oder Slices kann mit der Funktion len ermittelt werden:
index.go
12345randomNumbers := [] int { 1, 4, 5, 7, 9, 10, 12 } fmt.Println(len(randomNumbers)) // Output: 7 numbersSlice := randomNumbers[2:7] fmt.Println(len(numbersSlice)) // Output: 5
Die Kapazität eines Arrays oder eines Slices kann mit der Funktion cap ermittelt werden:
randomNumbers := [] int { 1, 4, 5, 7, 9, 10, 12 }
fmt.Println(cap(randomNumbers)) // Output: 7
numbersSlice := randomNumbers[2:7]
fmt.Println(cap(numbersSlice)) // Output: 5
Die Länge und die Kapazität eines Arrays sind immer identisch. Bei einem Slice hingegen kann die Kapazität von der Länge abweichen. Beispielsweise ist bei einem Slice, das aus einem Array erstellt wurde, die Kapazität größer als die Länge:
index.go
1234randomNumbers := [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 Slices ist die Anzahl der Elemente vom startingIndex des Slices bis zum Ende des ursprünglichen Arrays, aus dem es erstellt wurde. Im obigen Beispiel beträgt sie 6.
Beachten Sie, dass eine Änderung an einem Slice auch das ursprüngliche Array verändert. Daher wird im gegebenen Beispiel durch das Anhängen eines Elements (oder Werts) an ein Slice im Wesentlichen das Element neben dem Endindex des Slices im ursprünglichen Array aktualisiert. Anders ausgedrückt: Die Größe des Slices wird erhöht und die Elemente des ursprünglichen Arrays werden basierend auf den angehängten Elementen/Werten aktualisiert. Dies wird mit einem Beispiel deutlicher:
index.go
12345randomNumbers := [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 an das Slice anhängen können. Wenn wir die Kapazität des Slices überschreiten, erstellt und gibt die Funktion append ein neues Slice zurück, das nicht mehr mit einem Teil des ursprünglichen Arrays verbunden ist. Es wird somit vom ursprünglichen Array getrennt.
Im folgenden Beispiel sehen Sie: Das ursprüngliche Array bleibt unverändert, obwohl wir weitere Elemente an dessen Slice angehängt haben:
index.go
12345678numbers := [] 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 überschritten wurde. Infolgedessen gab die Funktion append ein neues Slice zurück, das nicht mehr auf das ursprüngliche Array verweist.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Can you explain more about how the `append` function works with slices?
What happens if I modify a slice after exceeding its capacity?
Can you provide an example showing the difference between modifying a slice within its capacity and after exceeding it?
Awesome!
Completion rate improved to 1.96
Länge vs. Kapazität
Swipe um das Menü anzuzeigen
Die Länge eines Arrays oder Slices kann mit der Funktion len ermittelt werden:
index.go
12345randomNumbers := [] int { 1, 4, 5, 7, 9, 10, 12 } fmt.Println(len(randomNumbers)) // Output: 7 numbersSlice := randomNumbers[2:7] fmt.Println(len(numbersSlice)) // Output: 5
Die Kapazität eines Arrays oder eines Slices kann mit der Funktion cap ermittelt werden:
randomNumbers := [] int { 1, 4, 5, 7, 9, 10, 12 }
fmt.Println(cap(randomNumbers)) // Output: 7
numbersSlice := randomNumbers[2:7]
fmt.Println(cap(numbersSlice)) // Output: 5
Die Länge und die Kapazität eines Arrays sind immer identisch. Bei einem Slice hingegen kann die Kapazität von der Länge abweichen. Beispielsweise ist bei einem Slice, das aus einem Array erstellt wurde, die Kapazität größer als die Länge:
index.go
1234randomNumbers := [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 Slices ist die Anzahl der Elemente vom startingIndex des Slices bis zum Ende des ursprünglichen Arrays, aus dem es erstellt wurde. Im obigen Beispiel beträgt sie 6.
Beachten Sie, dass eine Änderung an einem Slice auch das ursprüngliche Array verändert. Daher wird im gegebenen Beispiel durch das Anhängen eines Elements (oder Werts) an ein Slice im Wesentlichen das Element neben dem Endindex des Slices im ursprünglichen Array aktualisiert. Anders ausgedrückt: Die Größe des Slices wird erhöht und die Elemente des ursprünglichen Arrays werden basierend auf den angehängten Elementen/Werten aktualisiert. Dies wird mit einem Beispiel deutlicher:
index.go
12345randomNumbers := [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 an das Slice anhängen können. Wenn wir die Kapazität des Slices überschreiten, erstellt und gibt die Funktion append ein neues Slice zurück, das nicht mehr mit einem Teil des ursprünglichen Arrays verbunden ist. Es wird somit vom ursprünglichen Array getrennt.
Im folgenden Beispiel sehen Sie: Das ursprüngliche Array bleibt unverändert, obwohl wir weitere Elemente an dessen Slice angehängt haben:
index.go
12345678numbers := [] 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 überschritten wurde. Infolgedessen gab die Funktion append ein neues Slice zurück, das nicht mehr auf das ursprüngliche Array verweist.
Danke für Ihr Feedback!