Längd kontra Kapacitet
Vi kan bestämma längden på en array eller slice med hjälp av funktionen len:
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
Vi kan bestämma kapaciteten för en array eller slice med funktionen cap:
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
Längden och kapaciteten för en array är alltid samma. För en slice kan dock kapaciteten skilja sig från längden. Till exempel, när en slice skapas från en array är kapaciteten större än längden:
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
Kapaciteten för en slice är antalet element från startingIndex för slicen till slutet av den ursprungliga arrayen som den skapades från. I exemplet ovan är det 6.
Observera att en ändring av en slice även ändrar den ursprungliga arrayen. Därför innebär det i det givna exemplet att lägga till ett element (eller värde) till en slice i praktiken att elementet intill slicens slutindex i den ursprungliga arrayen uppdateras. Med andra ord ökar det storleken på slicen och uppdaterar elementen i den ursprungliga arrayen baserat på de tillagda elementen/värdena. Detta blir tydligare med ett exempel:
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]
Kapaciteten är användbar för att avgöra hur många element som kan läggas till i slicen. Om vi överskrider kapaciteten för slicen skapar och returnerar funktionen append en ny slice som inte är kopplad till någon del av den ursprungliga arrayen. Därmed blir den frikopplad från den ursprungliga arrayen.
Du kan se följande exempel: den ursprungliga arrayen förblir oförändrad även om vi lägger till fler element i dess slice:
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]
Detta inträffade eftersom slicen hade en kapacitet på 3, vilket vi överskred. Som ett resultat returnerade funktionen append en ny slice som inte längre refererar till den ursprungliga arrayen.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 1.96
Längd kontra Kapacitet
Svep för att visa menyn
Vi kan bestämma längden på en array eller slice med hjälp av funktionen len:
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
Vi kan bestämma kapaciteten för en array eller slice med funktionen cap:
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
Längden och kapaciteten för en array är alltid samma. För en slice kan dock kapaciteten skilja sig från längden. Till exempel, när en slice skapas från en array är kapaciteten större än längden:
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
Kapaciteten för en slice är antalet element från startingIndex för slicen till slutet av den ursprungliga arrayen som den skapades från. I exemplet ovan är det 6.
Observera att en ändring av en slice även ändrar den ursprungliga arrayen. Därför innebär det i det givna exemplet att lägga till ett element (eller värde) till en slice i praktiken att elementet intill slicens slutindex i den ursprungliga arrayen uppdateras. Med andra ord ökar det storleken på slicen och uppdaterar elementen i den ursprungliga arrayen baserat på de tillagda elementen/värdena. Detta blir tydligare med ett exempel:
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]
Kapaciteten är användbar för att avgöra hur många element som kan läggas till i slicen. Om vi överskrider kapaciteten för slicen skapar och returnerar funktionen append en ny slice som inte är kopplad till någon del av den ursprungliga arrayen. Därmed blir den frikopplad från den ursprungliga arrayen.
Du kan se följande exempel: den ursprungliga arrayen förblir oförändrad även om vi lägger till fler element i dess slice:
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]
Detta inträffade eftersom slicen hade en kapacitet på 3, vilket vi överskred. Som ett resultat returnerade funktionen append en ny slice som inte längre refererar till den ursprungliga arrayen.
Tack för dina kommentarer!