重要
删除切片中元素
Fast版本,改变顺序
此代码复制单个元素,元素长度增加, 运行时间不变。仍是复制单个元素的时间。
1
2
3
4
5
6
7
8
9
| a := []string{"A", "B", "C", "D", "E"}
i := 2
// Remove the element at index i from a.
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]
|
Slow版本,保持顺序
此代码复制len(a) - i - 1元素,元素长度增加, 运行时间呈线性增长。
1
2
3
4
5
6
7
8
9
| a := []string{"A", "B", "C", "D", "E"}
i := 2
// Remove the element at index i from a.
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]
|
Reference
Slice中删除元素的两种方式
How to delete an element from a Slice in Golang