Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Längd kontra Kapacitet | Arrayer och Slices
Introduktion till Golang

bookLängd kontra Kapacitet

Vi kan bestämma längden på en array eller slice med hjälp av funktionen len:

index.go

index.go

copy
12345
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

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

index.go

copy
1234
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

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

index.go

copy
12345
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]

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

index.go

copy
12345678
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]

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.

question mark

Vilken är den korrekta syntaxen för att lägga till ett element z till en slice som heter alphabets?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 4

Fråga AI

expand

Fråga AI

ChatGPT

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

bookLä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

index.go

copy
12345
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

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

index.go

copy
1234
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

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

index.go

copy
12345
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]

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

index.go

copy
12345678
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]

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.

question mark

Vilken är den korrekta syntaxen för att lägga till ett element z till en slice som heter alphabets?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 4
some-alt