Supprimer des éléments d'une tranche dans une boucle
Supprimer des éléments d'une tranche tout en itérant dessus à l'aide d'une boucle de plage n'est pas possible en raison de la façon dont les tranches fonctionnent en interne. Cependant, il existe des méthodes alternatives pour y parvenir :
Utiliser une boucle manuelle et décrémenter l'index
Une approche consiste à utiliser une boucle manuelle avec la fonction len() pour suivre la longueur de la tranche. Lorsqu'un élément est supprimé, l'index doit être décrémenté pour éviter de sauter l'élément suivant. Par exemple :
for i := 0; i < len(a); i++ { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) i-- } }
Utilisation d'une boucle vers le bas
Une meilleure alternative consiste à utiliser une boucle vers le bas pour éviter d'avoir besoin d'un ajustement manuel de l'index :
for i := len(a) - 1; i >= 0; i-- { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) } }
Copie d'éléments non amovibles
Pour les scénarios dans lesquels de nombreux éléments doivent être supprimés, copier les éléments non amovibles dans une nouvelle tranche peut être plus efficace :
b := make([]string, len(a)) copied := 0 for _, s := range(a) { if !conditionMeets(s) { b[copied] = s copied++ } } b = b[:copied]
Suppression sur place
Une technique de suppression sur place maintient deux indices et attribue des éléments non amovibles dans la même tranche :
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]
En utilisant des méthodes appropriées, vous pouvez supprimer efficacement des éléments d'une tranche au sein d'une boucle sans rencontrer d'erreurs liées au déplacement d'éléments dû à la suppression.
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!