切片的长度和容量

题目:

切片 a、b、c 的长度和容量分别是多少?

1
2
3
4
5
6
func main() {
s := [3]int{1, 2, 3}
a := s[:0]
b := s[:2]
c := s[1:2:cap(s)]
}

答案解析:

a、b、c 的长度和容量分别是 0 3、2 3、1 2。

知识点:数组或切片的截取操作。截取操作有带 2 个或者 3 个参数,形如:[i:j] 和 [i:j:k],假设截取对象的底层数组长度为 l。在操作符 [i:j] 中,如果 i 省略,默认 0,如果 j 省略,默认底层数组的长度,截取得到的切片长度和容量计算方法是 j-i、l-i。操作符 [i:j:k],k 主要是用来限制切片的容量,但是不能大于数组的长度 l,截取得到的切片长度和容量计算方法是 j-i、k-i

a切片截取s[:]相当于s[0:0],故长度为0,容量为l - i = 3 - 0 = 3;

b切片截取s[:2]相当于s[0:2],故长度为j - i = 2 - 0 = 2,容量为l - i = 3 - 0 = 3;

c切片截取s[1:2:cap(s)]相当于s[1:2:3],故长度为j - i = 2 - 1 = 1,容量为l - i = 3 - 1 = 2


切片的长度和容量
http://example.com/2023/07/03/Go每日一题/切片的长度和容量/
作者
Feng Tao
发布于
2023年7月3日
更新于
2023年7月22日
许可协议