Elemente aus einem Slice innerhalb einer Schleife entfernen
Das Entfernen von Elementen aus einem Slice während der Iteration darüber mithilfe einer Bereichsschleife ist aufgrund von nicht möglich die Art und Weise, wie Slices intern funktionieren. Es gibt jedoch alternative Methoden, um dies zu erreichen:
Verwenden einer manuellen Schleife und Dekrementieren des Index
Ein Ansatz besteht darin, eine manuelle Schleife mit der Funktion len() zu verwenden um die Länge des Slice zu verfolgen. Wenn ein Element entfernt wird, muss der Index dekrementiert werden, um zu verhindern, dass das nächste Element übersprungen wird. Zum Beispiel:
for i := 0; i < len(a); i++ { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) i-- } }
Abwärtsschleife verwenden
Eine bessere Alternative ist die Verwendung einer Abwärtsschleife, um die Notwendigkeit einer manuellen Indexanpassung zu vermeiden:
for i := len(a) - 1; i >= 0; i-- { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) } }
Kopieren nicht entfernbarer Elemente
In Szenarien, in denen viele Elemente entfernt werden müssen, kann das Kopieren der nicht entfernbaren Elemente in ein neues Slice effizienter sein:
b := make([]string, len(a)) copied := 0 for _, s := range(a) { if !conditionMeets(s) { b[copied] = s copied++ } } b = b[:copied]
In-Place-Entfernung
Eine In-Place-Entfernungstechnik verwaltet zwei Indizes und weist nicht entfernbare Elemente innerhalb desselben Slice zu:
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]
Durch die Verwendung geeigneter Methoden können Sie Elemente effektiv aus einem Slice innerhalb einer Schleife entfernen, ohne dass Fehler im Zusammenhang mit der Verschiebung von Elementen aufgrund der Entfernung auftreten.
Das obige ist der detaillierte Inhalt vonWie entferne ich beim Iterieren in Go sicher Elemente aus einem Slice?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!