Maison  >  Article  >  développement back-end  >  Comment ajouter des éléments aux tranches en langage Go

Comment ajouter des éléments aux tranches en langage Go

青灯夜游
青灯夜游original
2023-01-10 14:06:123161parcourir

Dans le langage Go, vous pouvez utiliser append() pour ajouter dynamiquement des éléments à une tranche. append() peut ajouter un élément, plusieurs éléments ou une nouvelle tranche à une tranche, avec la syntaxe "append(slice, element 1, element 2...)" ou "append(slice, new slice...)" . Lorsque vous utilisez la fonction append() pour ajouter dynamiquement des éléments à une tranche, s'il n'y a pas suffisamment d'espace pour accueillir suffisamment d'éléments, la tranche sera « étendue » et la longueur de la nouvelle tranche changera.

Comment ajouter des éléments aux tranches en langage Go

L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.

Dans le langage Go, vous pouvez utiliser append() pour ajouter dynamiquement des éléments à une tranche.

La fonction Go Language append()

append peut ajouter un élément, plusieurs éléments et de nouvelles tranches à une tranche

var a []int
a = append(a, 1) // 追加1个元素
a = append(a, 1, 2, 3) // 追加多个元素, 手写解包方式
a = append(a, []int{1,2,3}...) // 追加一个切片, 切片需要解包

Cependant, il convient de noter que lors de l'utilisation de la fonction append() pour rendre le tranche dynamique Lors de l'ajout d'éléments, s'il n'y a pas assez d'espace pour accueillir suffisamment d'éléments, la tranche sera "agrandie" et la longueur de la nouvelle tranche changera.

Lorsque la tranche s'agrandit, la règle d'expansion de la capacité est d'augmenter de 2 fois la capacité, comme 1, 2, 4, 8, 16..., le code est le suivant :

var numbers []int


for i := 0; i < 10; i++ {
    numbers = append(numbers, i)
    fmt.Printf("len: %d  cap: %d pointer: %p\n", len(numbers), cap(numbers), numbers)
}

La sortie du code est la suivante suit :

Comment ajouter des éléments aux tranches en langage Go

Description du code Comme suit :

  • La ligne 1 déclare une tranche entière.

  • Ligne 4, boucle pour ajouter 10 nombres à la tranche de nombres.

  • Ligne 5, imprimez les changements de longueur, de capacité et de pointeur de la tranche, utilisez la fonction len() pour afficher le nombre d'éléments de la tranche et utilisez la fonction cap() pour afficher la capacité de la tranche .

En regardant la sortie du code, nous pouvons trouver une règle intéressante : la longueur de tranche len n'est pas égale au plafond de capacité de tranche.

Le processus d'ajout continu d'éléments à une tranche est similaire à celui d'un déménagement d'entreprise. Au début du développement de l'entreprise, les fonds sont serrés et il y a peu d'employés, donc seule une petite pièce est nécessaire pour accueillir tous les employés. l'entreprise se développe et les revenus augmentent. L'augmentation du nombre de postes de travail nécessite une extension des postes de travail, mais la taille de l'espace de bureau est fixe et ne peut pas être modifiée. Par conséquent, l'entreprise ne peut que choisir de déménager. Chaque fois qu'elle déménage, tout le personnel doit être transféré. vers un nouveau bureau.

  • Les employés et les postes de travail sont les éléments de la tranche.

  • Le bureau est la mémoire allouée.

  • Déménager signifie réaffecter de la mémoire.

  • Peu importe le nombre de fois que vous déménagez, le nom de l'entreprise ne changera jamais et le nom de la variable représentant la tranche externe ne changera pas.

  • Étant donné que l'adresse change après le déménagement, l'"adresse" mémoire sera également modifiée.

En plus d'ajouter à la fin de la tranche, nous pouvons également ajouter des éléments au début de la tranche :

var a = []int{1,2,3}
a = append([]int{0}, a...) // 在开头添加1个元素
a = append([]int{-3,-2,-1}, a...) // 在开头添加1个切片

L'ajout d'éléments au début de la tranche entraînera généralement une réallocation de mémoire, et provoquera tout les éléments existants doivent être copiés une fois, donc les performances de l'ajout d'éléments depuis le début d'une tranche sont bien pires que celles de l'ajout d'éléments depuis la queue.

Étant donné que la fonction append renvoie les caractéristiques de la nouvelle tranche, les tranches prennent également en charge les opérations d'ajout en chaîne. Nous pouvons combiner plusieurs opérations d'ajout pour insérer des éléments au milieu de la tranche :

var a []int
a = append(a[:i], append([]int{x}, a[i:]...)...) // 在第i个位置插入x
a = append(a[:i], append([]int{1,2,3}, a[i:]...)...) // 在第i个位置插入切片

Le deuxième appel d'ajout dans chaque opération d'ajout Une tranche temporaire. sera créée, le contenu de a[i:] sera copié dans la tranche nouvellement créée, puis la tranche temporairement créée sera ajoutée à a[:i].

【Recommandations associées : Tutoriel vidéo Go, Enseignement de la programmation

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