Maison  >  Article  >  développement back-end  >  Discuter de l'opération de modification de Golang Slice

Discuter de l'opération de modification de Golang Slice

PHPz
PHPzoriginal
2023-04-11 09:13:37718parcourir

En langage Go, slice est une structure de données puissante qui peut facilement traiter des blocs de données continus. Par rapport aux tableaux, les tranches ont une longueur variable et des éléments peuvent être ajoutés ou supprimés, ce qui fait des tranches l'une des structures de données fréquemment utilisées dans Go.

Cependant, lors de l'utilisation de slice, nous devons inévitablement modifier certains éléments de la slice. Cet article explorera l'opération de modification de slice.

  1. Comment modifier l'élément à une position spécifiée dans la tranche

Pour modifier les éléments de la tranche, vous pouvez utiliser l'index pour accéder aux éléments de la tranche comme un tableau. Par exemple, le code suivant montre comment modifier l'élément à une position spécifiée dans la tranche :

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4}
    fmt.Println(nums)   // 输出 [1 2 3 4]

    nums[1] = 5
    fmt.Println(nums)   // 输出 [1 5 3 4]
}

Dans le code ci-dessus, nous initialisons d'abord une tranche contenant 4 entiers, puis modifions la valeur du deuxième élément à 5. Enfin, nous imprimons la tranche modifiée. Comme vous pouvez le constater, la modification a réussi.

  1. Comment ajouter des éléments à la tranche

Nous pouvons utiliser la fonction intégrée append() pour ajouter des éléments à la tranche. La manière la plus simple de modifier une tranche est d’utiliser la fonction append(). La fonction append() est utilisée de manière similaire à Array.push() en JavaScript. Le code suivant montre comment ajouter des éléments à une tranche :

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4}
    fmt.Println(nums)   // 输出 [1 2 3 4]

    nums = append(nums, 5)
    fmt.Println(nums)   // 输出 [1 2 3 4 5]
}

Dans le code ci-dessus, nous initialisons d'abord une tranche contenant 4 entiers, puis utilisons la fonction append() pour ajouter 5 à la fin de la tranche. Enfin, nous imprimons la tranche ajoutée. Comme vous pouvez le constater, l’ajout a réussi.

Il est à noter que si le nombre d'éléments dans la tranche a atteint sa capacité, le tableau sous-jacent peut réallouer de l'espace lors de l'ajout d'éléments, ce qui entraînera une dégradation des performances. Par conséquent, afin d'éviter une réallocation inutile de l'espace lors de l'ajout d'éléments, nous devons d'abord utiliser la fonction intégrée cap() pour déterminer si une expansion est nécessaire :

if len(nums)+1 > cap(nums) {
     newNums := make([]int, len(nums), cap(nums)*2)
     copy(newNums, nums)
     nums = newNums
}

Cet extrait de code vérifie s'il y a suffisamment de capacité dans la tranche pour ajouter un nouvel élément. Sinon, créez une nouvelle tranche avec deux fois la capacité et utilisez la fonction copy() pour copier tous les éléments de l'ancienne tranche vers la nouvelle tranche. Enfin, attribuez la nouvelle tranche à la tranche d'origine. Cette approche est plus efficace car elle évite de réaffecter la tranche d'origine et étend plutôt la capacité du tableau sous-jacent.

  1. Comment supprimer des éléments de la tranche

Semblable à l'ajout d'éléments, nous pouvons supprimer des éléments de la tranche à l'aide de la fonction intégrée append(). Dans Go, il n'y a pas de fonction de suppression intégrée, nous devons utiliser la fonction append() pour supprimer des éléments de la tranche. Le code suivant montre comment supprimer des éléments d'une tranche :

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4}
    fmt.Println(nums)   // 输出 [1 2 3 4]

    nums = append(nums[:1], nums[2:]...)
    fmt.Println(nums)   // 输出 [1 3 4]
}

Dans le code ci-dessus, nous initialisons d'abord une tranche contenant 4 entiers, puis utilisons la fonction append() pour supprimer le deuxième élément. Plus précisément, nous connectons d'abord la sous-tranche du premier élément au deuxième élément (exclusif) et la sous-tranche du troisième élément au dernier élément, obtenant ainsi une nouvelle tranche et l'attribuant à la tranche originale.

Il convient de noter que puisque la tranche dans Go est une structure, elle contient un pointeur vers le tableau sous-jacent, les informations de longueur et de capacité de la tranche, donc lorsque nous supprimons un élément dans la tranche, nous devons recréer une nouvelle tranche, et copie les éléments de la tranche d'origine dans la nouvelle tranche.

  1. Comment modifier plusieurs éléments dans une tranche

Si vous souhaitez modifier plusieurs éléments dans une tranche, vous pouvez utiliser une boucle for pour parcourir la tranche et modifier l'élément actuel à chaque itération. Le code suivant montre comment modifier plusieurs éléments dans une tranche :

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4}
    fmt.Println(nums)   // 输出 [1 2 3 4]

    for i := 0; i < len(nums); i++ {
        nums[i] *= 2
    }
    fmt.Println(nums)   // 输出 [2 4 6 8]
}

Dans le code ci-dessus, nous initialisons d'abord une tranche contenant 4 entiers, puis utilisons une boucle for pour parcourir la tranche et multiplier l'élément actuel par 2.

Il convient de noter que lors de la modification de plusieurs éléments dans une tranche, l'élément actuel doit être recalculé et copié dans la tranche à chaque itération. Non seulement c’est inefficace, mais c’est également sujet aux erreurs.

Résumé

Ce qui précède est une introduction à l'opération de modification de slice dans Go. Pour modifier des éléments individuels dans une tranche, vous pouvez utiliser l'indexation pour accéder aux éléments de la tranche, tout comme un tableau. Pour ajouter des éléments à une tranche, nous pouvons utiliser la fonction intégrée append(). Pour supprimer un élément d'une tranche, nous pouvons utiliser la fonction append() et supprimer l'élément spécifié en concaténant deux sous-tranches. Enfin, si vous souhaitez modifier plusieurs éléments dans la tranche, utilisez une boucle for pour parcourir toute la tranche et modifier l'élément actuel à chaque itération.

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