Please enable Javascript to view the contents

Go-Slice-切片操作汇总

 ·  ☕ 1 分钟

重要

删除切片中元素

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

分享

Hex
作者
Hex
CloudNative Developer

目录