Comprendre la réduction de capacité des tranches
Les tranches Go sont des structures de données efficaces qui utilisent un tableau sous-jacent pour le stockage. Ils sont représentés par une combinaison de longueur et de capacité, où la capacité définit le nombre maximum d'éléments que la tranche peut contenir.
Changements de capacité de tranche
Manipuler une tranche peut affectent parfois sa capacité :
Exemple
Considérons le programme Go suivant :
package main import "fmt" func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) s = s[:0] printSlice(s) s = s[:4] printSlice(s) s = s[2:] printSlice(s) } func printSlice(s []int) { fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s) }
L'exécution de ce programme produit :
len=6 cap=6 [2 3 5 7 11 13] len=0 cap=6 [] len=4 cap=6 [2 3 5 7] len=2 cap=4 [5 7]
Explication
Au départ, le slice a une longueur de 6 et une capacité de 6. Changer sa longueur à 0 ne modifie pas le pointeur, donc la capacité reste inchangée. L'extension de la longueur à 4 maintient également la capacité la même. Cependant, découper la tranche à partir du 2ème élément (s = s[2:]) modifie le pointeur, ce qui donne une nouvelle tranche d'une longueur de 2 et d'une capacité de 4.
Récupération de données
s = s[2:] supprime le deux premiers éléments de la tranche. Si vous avez besoin de les récupérer, vous devrez créer une nouvelle tranche qui les inclut avant d'effectuer l'opération s = s[2:].
Représentation en mémoire des tranches
Comprendre la représentation mémoire des tranches est crucial pour comprendre pourquoi la capacité de s = s[2:] diminue :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!