Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lengde vs Kapasitet | Arrayer og Slices
Introduksjon til Golang

bookLengde vs Kapasitet

Vi kan bestemme lengden på et array eller en slice ved å bruke funksjonen 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 bestemme kapasiteten til et array eller en slice ved å bruke cap-funksjonen:

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

Lengden og kapasiteten til et array er alltid like. For en slice kan derimot kapasiteten være forskjellig fra lengden. For eksempel, når en slice opprettes fra et array, er kapasiteten større enn lengden:

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

Kapasiteten til en slice er antall elementer fra startingIndex til slutten av den opprinnelige arrayen som slicen ble opprettet fra. I eksempelet ovenfor er den 6.

Husk at endringer i en slice også endrer den opprinnelige arrayen. Derfor vil det å legge til et element (eller en verdi) i en slice i det gitte eksempelet i praksis oppdatere elementet som ligger rett etter slutten av slicen i den opprinnelige arrayen. Med andre ord øker det størrelsen på slicen og oppdaterer elementene i den opprinnelige arrayen basert på de nye elementene/verdiene som legges til. Dette blir tydeligere med et eksempel:

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]

Kapasiteten er nyttig for å avgjøre hvor mange elementer vi kan legge til i slicen. Hvis vi overskrider kapasiteten til slicen, vil append-funksjonen opprette og returnere en ny slice som ikke er koblet til en del av den opprinnelige arrayen. Dermed blir den frakoblet den opprinnelige arrayen.

Du kan se følgende eksempel: Den opprinnelige arrayen forblir uendret selv om vi legger til flere elementer i dens 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]

Dette skjedde fordi slicen hadde en kapasitet på 3, som vi overskred. Som et resultat returnerte append-funksjonen en ny slice som ikke lenger refererer til det opprinnelige arrayet.

question mark

Hva er riktig syntaks for å legge til et element z i en slice kalt alphabets?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 4

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

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

bookLengde vs Kapasitet

Sveip for å vise menyen

Vi kan bestemme lengden på et array eller en slice ved å bruke funksjonen 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 bestemme kapasiteten til et array eller en slice ved å bruke cap-funksjonen:

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

Lengden og kapasiteten til et array er alltid like. For en slice kan derimot kapasiteten være forskjellig fra lengden. For eksempel, når en slice opprettes fra et array, er kapasiteten større enn lengden:

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

Kapasiteten til en slice er antall elementer fra startingIndex til slutten av den opprinnelige arrayen som slicen ble opprettet fra. I eksempelet ovenfor er den 6.

Husk at endringer i en slice også endrer den opprinnelige arrayen. Derfor vil det å legge til et element (eller en verdi) i en slice i det gitte eksempelet i praksis oppdatere elementet som ligger rett etter slutten av slicen i den opprinnelige arrayen. Med andre ord øker det størrelsen på slicen og oppdaterer elementene i den opprinnelige arrayen basert på de nye elementene/verdiene som legges til. Dette blir tydeligere med et eksempel:

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]

Kapasiteten er nyttig for å avgjøre hvor mange elementer vi kan legge til i slicen. Hvis vi overskrider kapasiteten til slicen, vil append-funksjonen opprette og returnere en ny slice som ikke er koblet til en del av den opprinnelige arrayen. Dermed blir den frakoblet den opprinnelige arrayen.

Du kan se følgende eksempel: Den opprinnelige arrayen forblir uendret selv om vi legger til flere elementer i dens 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]

Dette skjedde fordi slicen hadde en kapasitet på 3, som vi overskred. Som et resultat returnerte append-funksjonen en ny slice som ikke lenger refererer til det opprinnelige arrayet.

question mark

Hva er riktig syntaks for å legge til et element z i en slice kalt alphabets?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 4
some-alt