Maison > développement back-end > Golang > le corps du texte

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

DDD
Libérer: 2024-10-30 21:07:30
original
567 Les gens l'ont consulté

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 :

<code class="go">a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
for i := range a { // BAD
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
    }
}</code>
Copier après la connexion

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 :

<code class="go">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:]...)
    }
}</code>
Copier après la connexion

Méthode alternative pour de nombreuses suppressions

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

<code class="go">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]</code>
Copier après la connexion

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

Une technique de suppression sur place consiste à conserver deux indices et à attribuer des éléments non amovibles dans la même tranche tout en remettant à zéro les emplacements des éléments supprimés :

<code class="go">a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
copied := 0
for i := 0; i < len(a); i++ {
    if !conditionMeets(a[i]) {
        a[copied] = a[i]
        copied++
    }
}
for i := copied; i < len(a); i++ {
    a[i] = "" // Zero places of removed elements for garbage collection
}
a = a[:copied]</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!