Ce face container/list.List.Remove
l.Remove(e) scoate elementul e din listă în timp constant și returnează e.Value. Elementul trebuie să aparțină listei l; dacă nu, lista rămâne neschimbată.
După Remove, legăturile elementului sunt șterse, deci e.Next() returnează nil. Când ștergi în timpul parcurgerii, salvează mai întâi next := e.Next() și continuă cu el.
Parametri
| Parametru | Descriere |
|---|---|
e |
Elementul de scos, din această listă. |
Ce returnează
Valoarea elementului scos (any).
Exemple
Exemplul 1: Ștergere în timpul parcurgerii
Pentru fiecare element salvăm întâi următorul, apoi ștergem notele sub 5.
package main
import (
"container/list"
"fmt"
)
func main() {
note := list.New()
for _, n := range []int{9, 4, 7, 3, 10} {
note.PushBack(n)
}
for e := note.Front(); e != nil; {
urmator := e.Next()
if e.Value.(int) < 5 {
note.Remove(e)
}
e = urmator
}
for e := note.Front(); e != nil; e = e.Next() {
fmt.Print(e.Value, " ")
}
fmt.Println("- rămase:", note.Len())
}
Rezultat
9 7 10 - rămase: 3
Exemplul 2: Valoarea returnată de Remove
package main
import (
"container/list"
"fmt"
)
func main() {
stiva := list.New()
stiva.PushFront("pagina 1")
stiva.PushFront("pagina 2")
stiva.PushFront("pagina 3")
inapoi := stiva.Remove(stiva.Front()).(string)
fmt.Println("Înapoi de la:", inapoi)
fmt.Println("Acum pe:", stiva.Front().Value)
}
Rezultat
Înapoi de la: pagina 3
Acum pe: pagina 2
Greșeli frecvente
- Scrii
for e := l.Front(); e != nil; e = e.Next() { l.Remove(e) }: după primulRemove,e.Next()estenilși bucla se oprește după un singur element.
Comenzi înrudite
container/list.List.Front: Front returnează primul element al listei (sau nil dacă e goală), iar Len numărul de elemente; cu Next parcurgi lista.container/list.List.PushBack: PushBack adaugă o valoare la sfârșitul listei, PushFront la început; ambele returnează elementul nou creat.container/heap.Fix: Fix reorganizează heap-ul după ce elementul de la indicele i s-a schimbat; Remove scoate elementul de la indicele i.