"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment supprimer des éléments d’une tranche de manière itérative dans Go ?

Comment supprimer des éléments d’une tranche de manière itérative dans Go ?

Publié le 2024-11-07
Parcourir:630

How to Remove Elements from a Slice Iteratively in Go?

Supprimer des éléments d'une tranche de manière itérative

Lors d'une itération sur une tranche, la suppression d'un élément dans la boucle peut être délicate en raison du décalage de éléments ultérieurs. Une approche incorrecte courante consiste à utiliser append pour supprimer un élément, comme le montre l'exemple ci-dessous :

a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
for i := range a { // BAD
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i 1:]...)
    }
}

Cette méthode ne fonctionne pas correctement car la boucle ne prend pas en compte les éléments décalés. Pour supprimer correctement des éléments lors de l'itération, vous pouvez soit utiliser une boucle descendante, soit employer une méthode alternative qui évite les opérations de copie constantes.

Boucle descendante

Une boucle descendante itère dans ordre inverse, en commençant par le dernier élément. Cette approche vous permet de supprimer des éléments sans avoir à décrémenter manuellement les variables de boucle :

a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
for i := len(a) - 1; i >= 0; i-- {
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i 1:]...)
    }
}

Méthode alternative pour de nombreuses suppressions

Si vous devez supprimer un grand nombre d'éléments, l'utilisation d'append peut s'avérer inefficace en raison d'une copie excessive. Une approche alternative consiste à créer une nouvelle tranche et à copier uniquement les éléments non amovibles :

a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
b := make([]string, len(a))
copied := 0
for _, s := range(a) {
    if !conditionMeets(s) {
        b[copied] = s
        copied  
    }
}
b = b[:copied]

Suppression sur place pour de nombreuses suppressions (usage général)

Une technique de suppression sur place implique de conserver deux index et d'attribuer des éléments amovibles dans la même tranche tout en mettant à zéro les emplacements des éléments supprimés :

a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
copied := 0
for i := 0; i 
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3