Maison >développement back-end >Golang >Comment supprimer des éléments d'une tranche dans une boucle en Go : quelles sont les meilleures pratiques ?
Suppression d'éléments de tranche dans une boucle
Supprimer efficacement des éléments d'une tranche dans une boucle peut être délicat. Une approche incorrecte mais courante consiste à utiliser append dans une boucle basée sur une plage :
<code class="go">for i := range a { // BAD if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) } }</code>
Cependant, cette approche entraînerait une désynchronisation des variables de boucle et des éléments ignorés.
Corriger la suppression basée sur la boucle
Au lieu de cela, envisagez de décrémenter manuellement la variable de boucle après la suppression d'un élément :
<code class="go">for i := 0; i < len(a); i++ { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) i-- } }
Boucle vers le bas pour plusieurs suppressions
Si plusieurs éléments doivent être supprimés, la boucle vers le bas garantit que les éléments décalés restent en dehors de l'itération de la boucle :
<code class="go">for i := len(a) - 1; i >= 0; i-- { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) } }</code>
Alterner pour de nombreuses suppressions
Pour des suppressions importantes, pensez à copier les éléments non amovibles dans une nouvelle tranche, en évitant de nombreuses opérations de copie :
<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>
Suppression sur place avec cyclage
À effectuer dans -placer la suppression, conserver deux indices, attribuer les éléments non amovibles tout en mettant à zéro ceux 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>
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!