Go: several methods to Delete an element from a slice(fast & slow)
阿新 • • 發佈:2018-12-10
Go: Delete an element from a slice
Here’s how to remove the element at index i
from a slice.
Fast version (changes order of elements):
a := []string{"A", "B", "C", "D", "E"} i := 2 a[i] = a[len(a)-1] // Copy last element to index i a[len(a)-1] = "" // Erase last element (write zero value) a = a[:len(a)-1] // Truncate slice fmt.Println(a) // [A B E D]
This is fast: the code copies a single element and runs in constant time.
Slow version (maintains order of elements):
a := []string{"A", "B", "C", "D", "E"} i := 2 copy(a[i:], a[i+1:]) // Shift a[i+1:] left one index a[len(a)-1] = "" // Erase last element (write zero value) a = a[:len(a)-1] // Truncate slice fmt.Println(a) // [A B D E]
This could be slow: the code copies len(a) - i - 1 elements and runs in linear time.