Longitud vs Capacidad
Podemos determinar la longitud de un array o un slice utilizando la función 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 la capacidad de un array o un slice utilizando la función 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
La longitud y la capacidad de un array siempre son iguales. Sin embargo, para un slice, la capacidad puede diferir de la longitud. Por ejemplo, en el caso en que un slice se crea a partir de un array, la capacidad es mayor que la longitud:
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
La capacidad de un slice es el número de elementos desde el startingIndex del slice hasta el final del arreglo original del cual fue creado. En el ejemplo anterior, es 6.
Recuerde que modificar un slice también modifica el arreglo original. Por lo tanto, en el ejemplo dado, agregar un elemento (o valor) a un slice esencialmente actualiza el elemento siguiente al índice final del slice en el arreglo original. En otras palabras, aumenta el tamaño del slice y actualiza los elementos del arreglo original según los elementos/valores agregados. Esto se aclarará con un ejemplo:
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]
La capacidad es útil para determinar cuántos elementos se pueden agregar al slice. Si se excede la capacidad del slice, la función append crea y retorna un nuevo slice que no está conectado a una parte del arreglo original. Por lo tanto, queda desvinculado del arreglo original.
Puede observar el siguiente ejemplo: el arreglo original permanece sin cambios incluso cuando se agregan más elementos a su 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]
Esto ocurrió porque la porción tenía una capacidad de 3, la cual excedimos. Como resultado, la función append devolvió una nueva porción que ya no hace referencia al arreglo original.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 1.96
Longitud vs Capacidad
Desliza para mostrar el menú
Podemos determinar la longitud de un array o un slice utilizando la función 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 la capacidad de un array o un slice utilizando la función 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
La longitud y la capacidad de un array siempre son iguales. Sin embargo, para un slice, la capacidad puede diferir de la longitud. Por ejemplo, en el caso en que un slice se crea a partir de un array, la capacidad es mayor que la longitud:
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
La capacidad de un slice es el número de elementos desde el startingIndex del slice hasta el final del arreglo original del cual fue creado. En el ejemplo anterior, es 6.
Recuerde que modificar un slice también modifica el arreglo original. Por lo tanto, en el ejemplo dado, agregar un elemento (o valor) a un slice esencialmente actualiza el elemento siguiente al índice final del slice en el arreglo original. En otras palabras, aumenta el tamaño del slice y actualiza los elementos del arreglo original según los elementos/valores agregados. Esto se aclarará con un ejemplo:
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]
La capacidad es útil para determinar cuántos elementos se pueden agregar al slice. Si se excede la capacidad del slice, la función append crea y retorna un nuevo slice que no está conectado a una parte del arreglo original. Por lo tanto, queda desvinculado del arreglo original.
Puede observar el siguiente ejemplo: el arreglo original permanece sin cambios incluso cuando se agregan más elementos a su 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]
Esto ocurrió porque la porción tenía una capacidad de 3, la cual excedimos. Como resultado, la función append devolvió una nueva porción que ya no hace referencia al arreglo original.
¡Gracias por tus comentarios!