GoLang之内置append、copy函数

GoLang之内置append、copy函数

1.append

1.源码

func append(slice []Type, elems ...Type) []Type

2.用法

image-20220106171106024

3.追加一个元素

image-20220106171145637
image-20220121174340432

4.追加一个切片

image-20220106175602139
image-20220106175548687

5.make创建slice并添加元素

image-20220106182144518
image-20220106182127772

6.删除元素

6.1删除开头三个元素

func main() {
	slice1 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	slice2 := append(slice1[:0], slice1[3:]...)
	fmt.Println(len(slice2))//7
	fmt.Println(cap(slice2))//10
	fmt.Println(slice2)//[4, 5, 6, 7, 8, 9, 10]
}
6.2删除中间三个元素

func main() {
	slice1 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	slice2 := append(slice1[:1], slice1[4:]...)
	fmt.Println(len(slice2)) //7
	fmt.Println(cap(slice2)) //10
	fmt.Println(slice2)      //[1 5 6 7 8 9 10]

}

6.3删除结尾三个元素
func main() {
	slice1 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	slice2 := append(slice1[:0], slice1[:7]...)
	fmt.Println(len(slice2)) //7
	fmt.Println(cap(slice2)) //10
	fmt.Println(slice2)      //[1 2 3 4 5 6 7]
}

7.在Println函数里可直接输出并不会改变到原slice

func main() {
	stack1 := []string{}
	fmt.Println(stack1)
	name := "aaa"
	fmt.Println(append(stack1, name)) //输出[aaa]
	fmt.Println(stack1)
}

8.append函数必须有接受值(可以不是原slice)

func main() {
	stack1 := []string{}
	name := "aaa"
	 append(stack1, name)//编译错误:必须得有个接受
}


func main() {
	stack1 := []string{}
	name := "aaa"
	stack1 = append(stack1, name)
	fmt.Println(stack1)//输出: [aaa]
}

func main() {
	stack1 := []int{1, 2}
	fmt.Println(stack1) //[1 2]
	stack2 := []int{3, 4}
	name := 5
	stack2 = append(stack1, name) //编译错误:必须得有个接受
	fmt.Println(stack2)           //[1 2 5]
	fmt.Println(stack1)           //[1 2]  
}

2.copy

2.1源码

返回值是拷贝成功的元素个数

func copy(dst, src []Type) int

2.2大容量赋给小容量


func main() {
	slice1 := []int{1, 2, 3, 4, 5}
	slice2 := []int{5, 4, 3}
	fmt.Println(len(slice1))//5
	fmt.Println(cap(slice1))//5
	fmt.Println(len(slice2))//3
	fmt.Println(cap(slice2))//3
	//复制slice1到slice 2
	copy(slice2, slice1) //只会复制slice的前3个元素到slice2中
	fmt.Println(len(slice1))//5
	fmt.Println(cap(slice1))//5
	fmt.Println(len(slice2))//3
	fmt.Println(cap(slice2))//3
	fmt.Println(slice2)//[1,2,3]
}

2.3小容量赋给大容量`

func main() {
	slice1 := []int{1, 2, 3, 4, 5}
	slice2 := []int{5, 4, 3}
	fmt.Println(len(slice1)) //5
	fmt.Println(cap(slice1)) //5
	fmt.Println(len(slice2)) //3
	fmt.Println(cap(slice2)) //3
	//复制slice2到slice1
	copy(slice1, slice2)     //只会复制slice2的3个元素到slice1的前3个位置
	fmt.Println(len(slice1)) //5
	fmt.Println(cap(slice1)) //5
	fmt.Println(len(slice2)) //3
	fmt.Println(cap(slice2)) //3
	fmt.Println(slice1)      //[5,4,3,4,5]
}

`

2.4指定范围copy

image-20220111145958452

2.5删除元素

func main() {
	slice1 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	slice2 := slice1[:copy(slice1, slice1[3:])]
	fmt.Println(len(slice1)) //10
	fmt.Println(cap(slice1)) //10
	fmt.Println(len(slice2)) //7
	fmt.Println(cap(slice2)) //10
	fmt.Println(slice1)      //[4 5 6 7 8 9 10 8 9 10]
	fmt.Println(slice2)      //[4 5 6 7 8 9 10]    
}

3.切割方式删除元素


func main() {
	slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	fmt.Println(len(slice)) //10
	fmt.Println(cap(slice)) //10

	slice = slice[:len(slice)-5] //删除尾部5个元素
	fmt.Println(len(slice))      //5
	fmt.Println(cap(slice))      //10
	fmt.Println(slice)           //[1 2 3 4 5]

	slice = slice[5:]       //删除 头部5个元素
	fmt.Println(len(slice)) //0
	fmt.Println(cap(slice)) //5
	fmt.Println(slice)      //[]
}

func main() {
	slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	fmt.Println(slice[10])//编译没有问题,但是运行后会抛出索引越界错误
}

func main() {
	slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	fmt.Println(slice[10:]) //输出:[]
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoGo在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值