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
.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn