„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie entferne ich in Go iterativ Elemente aus einem Slice?

Wie entferne ich in Go iterativ Elemente aus einem Slice?

Veröffentlicht am 07.11.2024
Durchsuche:928

How to Remove Elements from a Slice Iteratively in Go?

Elemente iterativ aus einem Slice entfernen

Beim Durchlaufen eines Slice kann das Entfernen eines Elements innerhalb der Schleife aufgrund der Verschiebung schwierig sein nachfolgende Elemente. Ein häufig falscher Ansatz ist die Verwendung von „append“, um ein Element zu entfernen, wie im folgenden Beispiel zu sehen ist:

a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
for i := range a { // BAD
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i 1:]...)
    }
}

Diese Methode funktioniert nicht korrekt, da die Schleife die verschobenen Elemente nicht berücksichtigt. Um Elemente während der Iteration ordnungsgemäß zu entfernen, können Sie entweder eine Abwärtsschleife verwenden oder eine alternative Methode verwenden, die ständige Kopiervorgänge vermeidet.

Abwärtsschleife

Eine Abwärtsschleife iteriert umgekehrte Reihenfolge, beginnend mit dem letzten Element. Mit diesem Ansatz können Sie Elemente entfernen, ohne Schleifenvariablen manuell dekrementieren zu müssen:

a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
for i := len(a) - 1; i >= 0; i-- {
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i 1:]...)
    }
}

Alternative Methode für viele Entfernungen

Wenn Sie eine große Anzahl von Elementen entfernen müssen, kann die Verwendung von „append“ aufgrund übermäßigen Kopierens ineffizient sein. Ein alternativer Ansatz besteht darin, ein neues Slice zu erstellen und nur die nicht entfernbaren Elemente zu kopieren:

a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
b := make([]string, len(a))
copied := 0
for _, s := range(a) {
    if !conditionMeets(s) {
        b[copied] = s
        copied  
    }
}
b = b[:copied]

In-Place-Entfernung für viele Entfernungen (allgemeiner Zweck)

Eine In-Place-Entfernungstechnik umfasst die Verwaltung von zwei Indizes und die Zuweisung von Nicht-Entfernungen. entfernbare Elemente im selben Slice, während entfernte Elementpositionen auf Null gesetzt werden:

a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
copied := 0
for i := 0; i 
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3