"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo afecta la caída de los elementos desde el comienzo de una porción de GO?

¿Cómo afecta la caída de los elementos desde el comienzo de una porción de GO?

Publicado el 2025-02-06
Navegar:457

How Does Dropping Elements from the Beginning of a Go Slice Affect Its Capacity?

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
}
  • array: puntero a la matriz subyacente que respalda el porta Representa el número de elementos que puede contener.
  • dejando caer las últimas n elementos

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]
Último tutorial Más>

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