golang 切片 接口_7.4. 切片重组(reslice)

我们已经知道切片创建的时候通常比相关数组小,例如:

slice1 := make([]type, start_length, capacity)

其中 start_length 作为切片初始长度而 capacity 作为相关数组的长度。

这么做的好处是我们的切片在达到容量上限后可以扩容。改变切片长度的过程称之为切片重组 reslicing,做法如下:slice1 = slice1[0:end],其中 end 是新的末尾索引(即长度)。

将切片扩展 1 位可以这么做:

sl = sl[0:len(sl)+1]

切片可以反复扩展直到占据整个相关数组。

package main

import "fmt"

func main() {

slice1 := make([]int, 0, 10)

// load the slice, cap(slice1) is 10:

for i := 0; i < cap(slice1); i++ {

slice1 = slice1[0:i+1]

slice1[i] = i

fmt.Printf("The length of slice is %d\n", len(slice1))

}

// print the slice:

for i := 0; i < len(slice1); i++ {

fmt.Printf("Slice at %d is %d\n", i, slice1[i])

}

}

输出结果:

The length of slice is 1

The length of slice is 2

The length of slice is 3

The length of slice is 4

The length of slice is 5

The length of slice is 6

The length of slice is 7

The length of slice is 8

The length of slice is 9

The length of slice is 10

Slice at 0 is 0

Slice at 1 is 1

Slice at 2 is 2

Slice at 3 is 3

Slice at 4 is 4

Slice at 5 is 5

Slice at 6 is 6

Slice at 7 is 7

Slice at 8 is 8

Slice at 9 is 9

另一个例子:

var ar = [10]int{0,1,2,3,4,5,6,7,8,9}

var a = ar[5:7] // reference to subarray {5,6} - len(a) is 2 and cap(a) is 5

将 a 重新分片:

a = a[0:4] // ref of subarray {5,6,7,8} - len(a) is now 4 but cap(a) is still 5

问题 7.7

1) 如果 a 是一个切片,那么 s[n:n] 的长度是多少?

2) s[n:n+1] 的长度又是多少?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值