go 语言学习笔记⑥----切片

go 语言学习笔记⑥----切片

通过内部指针和相关属性,引用数组片段,以实现变长方案。
go中数据结构, 我们可以增加更多的值

声明

arr := [...]int{1, 2, 3, 4, 5, 6}
slice := arr[0:3:5]
数组[起始位置:终止位置:max] (左闭右开)
长度= 终止 - 起始
容量= max - 起始

函数

len()长度
cap()容量

arr := [10]int{1, 2, 3, 4, 5, 6}
slice := arr[0:3:5]
fmt.Println(len(slice), cap(slice), slice)

结果:3 5 [1 2 3]

切片与数组区别

数组声明**[]中的长度为固定的一个常量, 数组不能修改长度 len == cap
切片
[]可以为或者为…**长度和容量可以不固定
arr := []int{1, 2, 3, 4, 5, 6} 自动初始化

make函数

arr := make([]int, 10, 10)
切片变量 := mak([]切片类型,len , cap)

截取

方法作用
s[n]切片索引n位置的值
s[:]切片索引从0到len(s) - 1的切片
s[low:]切片索引从low到最后的切片
s[:high]切片索引从0到high的切片
s[low:high:max]切片索引从low到high的切片(容量为max - low)
package main

import (
	"fmt"
)

func main() {
	a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	fmt.Println(a[2])
	b1 := a[:]
	fmt.Println(b1)
	b2 := a[3:]
	fmt.Println(b2)
	b3 := a[:5]
	fmt.Println(b3)
	b4 := a[3:5]
	fmt.Println(b4)
	b5 := a[3:6:9]
	fmt.Println(b2, len(b5), cap((b5)))

}

结果

3
[1 2 3 4 5 6 7 8 9]
[4 5 6 7 8 9]
[1 2 3 4 5]
[4 5]
[4 5 6 7 8 9] 3 6

append函数

在末尾加新成员

package main

import (
	"fmt"
)

func main() {
	arr := [10]int{1, 2, 3, 4, 5, 6}
	slice := arr[0:3:5]
	fmt.Println(len(slice), cap(slice), slice)
	slice = append(slice, 1)
	fmt.Println(slice)
	fmt.Println(arr)
}

结果

3 5 [1 2 3]
[1 2 3 1]
[1 2 3 1 5 6 0 0 0 0]

改变切片也会改变原数组
如果切片容量不够, 扩容两倍容量

package main

import (
	"fmt"
)

func main() {
	a := []int{}
	for i := 0; i <= 16; i++ {
		a = append(a, i)
		fmt.Println(a, len(a), cap(a))
	}
}

结果

[0] 1 1
[0 1] 2 2
[0 1 2] 3 4
[0 1 2 3] 4 4
[0 1 2 3 4] 5 8
[0 1 2 3 4 5] 6 8
[0 1 2 3 4 5 6] 7 8
[0 1 2 3 4 5 6 7] 8 8
[0 1 2 3 4 5 6 7 8] 9 16
[0 1 2 3 4 5 6 7 8 9] 10 16
[0 1 2 3 4 5 6 7 8 9 10] 11 16
[0 1 2 3 4 5 6 7 8 9 10 11] 12 16
[0 1 2 3 4 5 6 7 8 9 10 11 12] 13 16
[0 1 2 3 4 5 6 7 8 9 10 11 12 13] 14 16
[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14] 15 16
[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] 16 16
[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16] 17 32

copy

copy(目的, 原来)

package main

import (
	"fmt"
)

func main() {
	a := []int{1, 2, 3, 4}
	b := []int{5, 6, 7}
	copy(a, b)
	fmt.Println(a, b)
	a[1] = 12
	b[2] = 18
	fmt.Println(a, b)

}

结果

[5 6 7 4] [5 6 7]
[5 12 7 4] [5 6 18]

做函数参数

package main

import (
	"fmt"
)

func addV(a []int) {
	for i := 1; i <= 5; i++ {
		a[i] = i
	}
}

func main() {
	a := make([]int, 10)
	addV(a)
	fmt.Println(a)
}
//[0 1 2 3 4 5 0 0 0 0]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值