Comment supprimer un élément d'une tranche dans le Golang

Suraj Joshi 30 janvier 2023
  1. Créer des sous-tranches à partir d’une tranche donnée
  2. Supprimer des éléments de la tranche au Go
Comment supprimer un élément d'une tranche dans le Golang

Dans le langage Go, slice est un tableau à taille variable qui est indexé dès le tableau mais sa taille n’est pas fixe car il peut être redimensionné. Tout élément d’un slice peut être supprimé du slice en raison de sa nature dynamique. La suppression d’un élément d’une slice est très différente des autres langues en raison de l’absence de fonctions intégrées dans Go pour supprimer un élément d’une slice.

Créer des sous-tranches à partir d’une tranche donnée

Avant de nous plonger dans la suppression d’un élément d’une slice, nous allons examiner la création d’une subslice à partir d’une slice donnée, car c’est l’un des principaux composants de la suppression d’un élément d’une slice.

package main

import "fmt"

func main() {
    var Slice1 = []int{1, 2, 3, 4}
    fmt.Printf("slice1: %v\n", Slice1)

    Slice2 := Slice1[:2]
    fmt.Printf("slice2: %v\n", Slice2)
}

Production:

slice1: [1 2 3 4]
slice2: [1 2]

Ici, slice2 est une sous-slice formée à partir de slice1 qui contient tous les éléments depuis le début, c’est-à-dire de l’index 0 à l’index 2-1, c’est-à-dire 1. Notez ici que l’indexation de la slice au Go commence à partir de 0.

package main

import "fmt"

func main() {
    var Slice1 = []int{1, 2, 3, 4}
    fmt.Printf("slice1: %v\n", Slice1)

    Slice2 := Slice1[2:]
    fmt.Printf("slice2: %v\n", Slice2)
}

Production:

slice1: [1 2 3 4]
slice2: [3 4]

Ici, slice2 est une sous-slice formée à partir de slice1 qui contient tous les éléments de l’index 2 à la fin de la slice.

Supprimer des éléments de la tranche au Go

La tâche de supprimer des éléments de la slice peut être accomplie selon différentes approches basées sur nos exigences. Les différentes manières de supprimer un élément de slice sont examinées ci-dessous:

Lorsque l’ordre est important

Si nous souhaitons maintenir l’ordre des tranches après avoir supprimé l’élément, nous déplaçons la position de tous les éléments à droite des éléments supprimés vers la gauche d’un élément.

package main

import "fmt"

func remove(slice []int, s int) []int {
    return append(slice[:s], slice[s+1:]...)
}

func main() {
    var Slice1 = []int{1, 2, 3, 4, 5}
    fmt.Printf("slice1: %v\n", Slice1)

    Slice2 := remove(Slice1, 2)
    fmt.Printf("slice2: %v\n", Slice2)
}

Production:

slice1: [1 2 3 4 5]
slice2: [1 2 4 5]

Ici, la slice2 est formée après avoir retiré l’élément à l’index 2 de la slice1.

Lorsque l’ordre n’est pas important

package main

import "fmt"

func remove(s []int, i int) []int {
    s[i] = s[len(s)-1]
    return s[:len(s)-1]
}

func main() {
    var Slice1 = []int{1, 2, 3, 4, 5}
    fmt.Printf("slice1: %v\n", Slice1)

    Slice2 := remove(Slice1, 2)
    fmt.Printf("slice2: %v\n", Slice2)
}

Production:

slice1: [1 2 3 4 5]
slice2: [1 2 5 4]

Ici, la slice2 est formée après avoir retiré l’élément à l’index 2 de la slice1, mais l’ordre des éléments n’est pas conservé ici. C’est plus rapide que la méthode précédente.

Ainsi, lorsque l’ordre a une priorité plus élevée que la vitesse, nous utilisons la première méthode et si la vitesse a une priorité plus élevée que l’ordre, nous utilisons la seconde méthode pour supprimer un élément d’une slice.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Article connexe - Go Slice