Længde vs Kapacitet
Vi kan bestemme længden af et array eller et slice ved hjælp af 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 bestemme kapaciteten af et array eller et slice ved at bruge cap-funktionen:
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 og kapaciteten af et array er altid ens. For et slice kan kapaciteten dog være forskellig fra længden. For eksempel, når et slice oprettes ud fra et array, er kapaciteten større end 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 af et slice er antallet af elementer fra startingIndex for slicet til slutningen af det oprindelige array, hvorfra det blev oprettet. I eksemplet ovenfor er det 6.
Bemærk, at ændringer i et slice også ændrer det oprindelige array. Derfor vil tilføjelse af et element (eller en værdi) til et slice i det givne eksempel reelt opdatere elementet ved siden af slicets slutindeks i det oprindelige array. Med andre ord øges størrelsen af slicet, og elementerne i det oprindelige array opdateres baseret på de tilføjede elementer/værdier. Dette bliver 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]
Kapaciteten er nyttig til at bestemme, hvor mange elementer der kan tilføjes til slicet. Hvis vi overskrider kapaciteten for slicet, opretter og returnerer append-funktionen et nyt slice, som ikke er forbundet til en del af det oprindelige array. Det bliver derfor adskilt fra det oprindelige array.
Du kan se følgende eksempel: det oprindelige array forbliver uændret, selvom vi har tilføjet flere elementer til dets 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 skete, fordi slicen havde en kapacitet på 3, som vi overskred. Som resultat returnerede append-funktionen en ny slice, der ikke længere refererer til det oprindelige array.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 1.96
Længde vs Kapacitet
Stryg for at vise menuen
Vi kan bestemme længden af et array eller et slice ved hjælp af 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 bestemme kapaciteten af et array eller et slice ved at bruge cap-funktionen:
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 og kapaciteten af et array er altid ens. For et slice kan kapaciteten dog være forskellig fra længden. For eksempel, når et slice oprettes ud fra et array, er kapaciteten større end 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 af et slice er antallet af elementer fra startingIndex for slicet til slutningen af det oprindelige array, hvorfra det blev oprettet. I eksemplet ovenfor er det 6.
Bemærk, at ændringer i et slice også ændrer det oprindelige array. Derfor vil tilføjelse af et element (eller en værdi) til et slice i det givne eksempel reelt opdatere elementet ved siden af slicets slutindeks i det oprindelige array. Med andre ord øges størrelsen af slicet, og elementerne i det oprindelige array opdateres baseret på de tilføjede elementer/værdier. Dette bliver 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]
Kapaciteten er nyttig til at bestemme, hvor mange elementer der kan tilføjes til slicet. Hvis vi overskrider kapaciteten for slicet, opretter og returnerer append-funktionen et nyt slice, som ikke er forbundet til en del af det oprindelige array. Det bliver derfor adskilt fra det oprindelige array.
Du kan se følgende eksempel: det oprindelige array forbliver uændret, selvom vi har tilføjet flere elementer til dets 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 skete, fordi slicen havde en kapacitet på 3, som vi overskred. Som resultat returnerede append-funktionen en ny slice, der ikke længere refererer til det oprindelige array.
Tak for dine kommentarer!