Maison > développement back-end > Golang > Comment supprimer efficacement des éléments d'une tranche dans une boucle dans Go ?

Comment supprimer efficacement des éléments d'une tranche dans une boucle dans Go ?

Barbara Streisand
Libérer: 2024-10-31 06:21:02
original
773 Les gens l'ont consulté

How to Efficiently Remove Elements from a Slice in a Loop in Go?

Suppression d'éléments sur place dans une boucle de tranche

Problème :

Accès aux éléments de tranche de i dans une plage de boucle et les supprimer à l'aide de append() est problématique. L'incrémentation de la variable de boucle (i) peut ignorer les éléments suivants après la suppression, entraînant un traitement incomplet.

Bonnes pratiques :

1. Décrémentation manuelle des variables de boucle

Utilisez une boucle for régulière avec une variable de boucle manuelle (i) décrémentée lorsqu'un élément est supprimé :

<code class="go">for i := 0; i < len(a); i++ {
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
        i--
    }
}
Copier après la connexion

2. Boucle vers le bas

Vous pouvez également utiliser une boucle vers le bas pour éviter la décrémentation manuelle :

<code class="go">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

3. Copie d'éléments non amovibles

Si de nombreux éléments doivent être supprimés, envisagez de copier des éléments non amovibles dans une nouvelle tranche pour améliorer l'efficacité :

<code class="go">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

4. Copie et remise à zéro sur place

Pour une suppression sur place à usage général, conservez deux index et attribuez des éléments non amovibles tout en remettant à zéro les espaces des éléments supprimés :

<code class="go">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
}
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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal