Wie entferne ich beim Iterieren in Go sicher Elemente aus einem Slice?

DDD
Freigeben: 2024-10-27 17:38:02
Original
637 Leute haben es durchsucht

How to Safely Remove Elements from a Slice While Iterating in Go?

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--
    }
}
Nach dem Login kopieren

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:]...)
    }
}
Nach dem Login kopieren

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]
Nach dem Login kopieren

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]
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!