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
701 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!

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
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