Heim > Backend-Entwicklung > Golang > Wie entferne ich Elemente effizient aus einem Slice in einer Schleife in Go?

Wie entferne ich Elemente effizient aus einem Slice in einer Schleife in Go?

Barbara Streisand
Freigeben: 2024-10-31 06:21:02
Original
703 Leute haben es durchsucht

How to Efficiently Remove Elements from a Slice in a Loop in Go?

In-Place-Elemententfernung innerhalb einer Slice-Schleife

Problem:

Zugriff auf Slice-Elemente von i innerhalb einer range for-Schleife und deren Entfernung mit append() ist problematisch. Das Erhöhen der Schleifenvariablen (i) kann nach dem Entfernen nachfolgende Elemente überspringen, was zu einer unvollständigen Verarbeitung führt.

Best Practices:

1. Manuelle Dekrementierung von Schleifenvariablen

Verwenden Sie eine reguläre for-Schleife mit manueller Schleifenvariable (i), die dekrementiert wird, wenn ein Element entfernt wird:

<code class="go">for i := 0; i < len(a); i++ {
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
        i--
    }
}
Nach dem Login kopieren

2. Abwärtsschleife

Alternativ können Sie eine Abwärtsschleife verwenden, um eine manuelle Dekrementierung zu vermeiden:

<code class="go">for i := len(a) - 1; i >= 0; i-- {
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
    }
}</code>
Nach dem Login kopieren

3. Kopieren nicht entfernbarer Elemente

Wenn zahlreiche Elemente entfernt werden müssen, sollten Sie erwägen, nicht entfernbare Elemente in ein neues Segment zu kopieren, um die Effizienz zu verbessern:

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

4. Kopieren und Nullen vor Ort

Beim allgemeinen Entfernen vor Ort behalten Sie zwei Indizes bei und weisen nicht entfernbare Elemente zu, während Sie entfernte Elementräume auf Null setzen:

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

Das obige ist der detaillierte Inhalt vonWie entferne ich Elemente effizient aus einem Slice in einer Schleife in Go?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage