Lengde vs Kapasitet
Vi kan bestemme lengden på et array eller en slice ved å bruke funksjonen 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 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
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
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
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]
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
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]
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.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
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
Lengde vs Kapasitet
Sveip for å vise menyen
Vi kan bestemme lengden på et array eller en slice ved å bruke funksjonen 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 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
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
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
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]
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
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]
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.
Takk for tilbakemeldingene dine!