Maison > développement back-end > Golang > Comment le découpage affecte-t-il la capacité de Go Slice ?

Comment le découpage affecte-t-il la capacité de Go Slice ?

DDD
Libérer: 2024-12-17 08:22:24
original
506 Les gens l'ont consulté

How Does Slicing Affect Go Slice Capacity?

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é :

  • s = s[:0] et s = s[:4] laisse la capacité de tranche inchangée car ils ne modifient pas le pointeur sous-jacent vers le tableau.
  • s = s[2:] diminue la capacité de tranche car il change le pointeur vers la nouvelle tranche en supprimant les deux premières éléments.

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)
}
Copier après la connexion

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]
Copier après la connexion

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 :

  • Lorsqu'une tranche est créée, elle pointe vers un tableau sous-jacent.
  • Découper une tranche n'alloue pas un nouveau tableau. Au lieu de cela, il crée une nouvelle valeur de tranche avec un pointeur différent vers le tableau d'origine.
  • La modification du pointeur réaffecte efficacement la tranche pour qu'elle pointe vers une partie différente du tableau sous-jacent. Cela peut affecter la capacité.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal