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