Comprimento vs Capacidade
Podemos determinar o comprimento de um array ou de um slice utilizando a função 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
Podemos determinar a capacidade de um array ou de um slice utilizando a função cap
:
randomNumbers := []int{1, 4, 5, 7, 9, 10, 12}
fmt.Println(cap(randomNumbers)) // Saída: 7
numbersSlice := randomNumbers[2:7]
fmt.Println(cap(numbersSlice)) // Saída: 5
O comprimento e a capacidade de um array são sempre iguais. No entanto, para um slice, a capacidade pode ser diferente do comprimento. Por exemplo, no caso em que um slice é criado a partir de um array, a capacidade é maior que o comprimento:
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
A capacidade de um slice é o número de elementos do startingIndex
do slice até o final do array original do qual ele foi criado. No exemplo acima, é 6
.
Lembre-se que modificar um slice também modifica o array original. Portanto, no exemplo dado, acrescentar um elemento (ou valor) ao slice atualiza essencialmente o elemento seguinte ao índice final do slice no array original. Em outras palavras, isso aumenta o tamanho do slice e atualiza os elementos do array original com base nos elementos/valores acrescentados. Isso ficará mais claro com um exemplo:
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]
A capacidade é útil para determinar quantos elementos podemos acrescentar ao segmento. Se excedermos a capacidade do segmento, a função append
cria e retorna um novo segmento que não está conectado a uma parte do array original. Portanto, ele se torna desvinculado do array original.
Você pode ver o seguinte exemplo: o array original permanece inalterado, mesmo que tenhamos acrescentado mais elementos ao seu segmento:
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]
Isso aconteceu porque o slice tinha uma capacidade de 3, que ultrapassamos. Como resultado, a função append
retornou um novo slice que não faz mais referência ao array original.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you explain more about how the capacity of a slice is calculated?
What happens if I keep appending elements beyond the slice's capacity?
Can you provide an example showing how the original array and the new slice differ after exceeding capacity?
Awesome!
Completion rate improved to 1.96
Comprimento vs Capacidade
Deslize para mostrar o menu
Podemos determinar o comprimento de um array ou de um slice utilizando a função 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
Podemos determinar a capacidade de um array ou de um slice utilizando a função cap
:
randomNumbers := []int{1, 4, 5, 7, 9, 10, 12}
fmt.Println(cap(randomNumbers)) // Saída: 7
numbersSlice := randomNumbers[2:7]
fmt.Println(cap(numbersSlice)) // Saída: 5
O comprimento e a capacidade de um array são sempre iguais. No entanto, para um slice, a capacidade pode ser diferente do comprimento. Por exemplo, no caso em que um slice é criado a partir de um array, a capacidade é maior que o comprimento:
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
A capacidade de um slice é o número de elementos do startingIndex
do slice até o final do array original do qual ele foi criado. No exemplo acima, é 6
.
Lembre-se que modificar um slice também modifica o array original. Portanto, no exemplo dado, acrescentar um elemento (ou valor) ao slice atualiza essencialmente o elemento seguinte ao índice final do slice no array original. Em outras palavras, isso aumenta o tamanho do slice e atualiza os elementos do array original com base nos elementos/valores acrescentados. Isso ficará mais claro com um exemplo:
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]
A capacidade é útil para determinar quantos elementos podemos acrescentar ao segmento. Se excedermos a capacidade do segmento, a função append
cria e retorna um novo segmento que não está conectado a uma parte do array original. Portanto, ele se torna desvinculado do array original.
Você pode ver o seguinte exemplo: o array original permanece inalterado, mesmo que tenhamos acrescentado mais elementos ao seu segmento:
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]
Isso aconteceu porque o slice tinha uma capacidade de 3, que ultrapassamos. Como resultado, a função append
retornou um novo slice que não faz mais referência ao array original.
Obrigado pelo seu feedback!