Maison  >  Article  >  développement back-end  >  Pourquoi la suppression des premiers éléments d'une tranche dans Go modifie-t-elle sa capacité, mais pas la suppression du dernier ?

Pourquoi la suppression des premiers éléments d'une tranche dans Go modifie-t-elle sa capacité, mais pas la suppression du dernier ?

DDD
DDDoriginal
2024-11-04 02:30:01333parcourir

Why Does Dropping the First Elements of a Slice in Go Change its Capacity, But Dropping the Last Doesn't?

Comprendre les changements de capacité des tranches : suppression du premier et du dernier élément

Dans Go, les tranches sont une structure de données qui fournit un élément modifiable et de taille dynamique. vue d'un tableau sous-jacent. Lorsque la capacité d'une tranche change, cela affecte le tableau sous-jacent et la gestion de la mémoire.

Considérez le code Go suivant :

<code class="go">package main

import "fmt"

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)
}

func printSlice(s []int) {
    fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}</code>

Pourquoi la capacité de la tranche change-t-elle lorsque les deux premiers éléments sont supprimés, mais pas lorsque les deux derniers sont supprimés ?

Pour répondre à cette question, nous devons comprendre comment les tranches Go sont implémentées. Il s'agit d'une structure avec trois champs :

  • array : un pointeur vers le tableau sous-jacent
  • len : le nombre d'éléments dans la tranche
  • cap : la capacité de la tranche, ou le nombre maximum d'éléments qu'elle peut contenir

Lorsque les deux derniers éléments de la tranche sont déposés (s = s[:len(s)-2]), le champ len est décrémenté, mais le pointeur de tableau et le champ cap restent les mêmes. En effet, le tableau sous-jacent n'est pas modifié et la tranche fait toujours référence au même tableau.

Cependant, lorsque les deux premiers éléments de la tranche sont supprimés (s = s[2:]), un nouveau un tableau est créé pour contenir la nouvelle tranche. Le champ len est décrémenté, le pointeur du tableau est mis à jour pour pointer vers le nouveau tableau et le champ cap est également décrémenté pour refléter la taille plus petite du nouveau tableau.

Conclusion

La capacité d'une tranche change lorsque les premiers éléments sont supprimés car un nouveau tableau sous-jacent doit être créé pour accueillir la tranche. Cela n'est pas nécessaire lorsque les derniers éléments sont supprimés car le tableau existant peut toujours être utilisé.

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!

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