comprensión de la capacidad de los cambios en Go
Cuando se trabaja con cortes GO, es esencial comprender sus propiedades subyacentes, incluida su capacidad. Mientras que deja caer los últimos n elementos de una porción mantiene su capacidad, dejar caer los primeros n elementos afecta la capacidad.
la estructura de corte GO
Go se implementan como estructuras que consta de tres campos:
type slice struct {
array unsafe.Pointer
len int
cap int
}
cuando dejamos caer los últimos n ítems desde una porción, usando la expresión s [ : len (s) -n], creamos una nueva porción que comparte la misma matriz subyacente que la original. Sin embargo, la longitud de la nueva porción se reduce, mientras que la capacidad permanece sin cambios. Esto se debe a que la matriz subyacente tiene una capacidad suficiente para acomodar los elementos restantes.
soltando primero n elementos
por otro lado, cuando dejamos caer los primeros n elementos de Una porción, usando la expresión s [n:], no solo creamos una nueva porción con una longitud más corta sino que también asignamos una nueva matriz subyacente. La capacidad del nuevo porte se ajusta para acomodar el número reducido de elementos.
ejemplo
Considere el siguiente código:
func principal() { S: = [] int {2, 3, 5, 7, 11, 13} Printslice (s) // Deja caer sus dos últimos valores s = s [: len (s) -2] Printslice (s) // suelte sus dos primeros valores S = S [2:] Printslice (s) }La salida muestra los cambios en la longitud, la capacidad y el puntero de la matriz subyacente mientras manipulamos el porta ] PTR = 0x450000 LEN = 4 CAP = 6 [2 3 5 7] ptr = 0x450008 len = 2 cap = 4 [5 7]
func main() {
s := []int{2, 3, 5, 7, 11, 13}
printSlice(s)
// Drop its last two values
s = s[:len(s)-2]
printSlice(s)
// Drop its first two values
s = s[2:]
printSlice(s)
}
conclusión
ptr=0x450000 len=6 cap=6 [2 3 5 7 11 13] ptr=0x450000 len=4 cap=6 [2 3 5 7] ptr=0x450008 len=2 cap=4 [5 7]
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3