Go的切片

1、Go的切片概念

切片与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大,所以可以将切片理解成“动态数组”,但是,它不是数组。

2、切片的基本写法

package main

import "fmt"

func main() {
	var s []int
	fmt.Println(len(s))

	s2 := []int{}
	fmt.Println(len(s2))

	//make(切片类型,长度,容量)
	//长度是已经初始化的空间。容量是已经开辟的空间,包括已经初始化的空间和空闲的空间。
	s3 := make([]int, 3, 5)
	fmt.Println(s3)
	fmt.Println("s3 长度 len = ", len(s3))
	fmt.Println("s3 容量 cap = ", cap(s3))
}

输出结果:

0
0               
[0 0 0]         
s3 长度 len =  3
s3 容量 cap =  5

3、切片初始化

package main

import "fmt"

func main() {
	var s []int // s := []int {1, 2, 3, 4, 5}
	s = append(s, 1, 2, 3, 4, 5)
	s[3] = 77
	s = append(s, 6, 7, 8)
	fmt.Println(s)

	s2 := make([]int, 3, 10)
	s2[0] = 10
	s2[1] = 11
	s2[2] = 12

	//s2[3] = 13 //会造成下标越界

	s2 = append(s2, 80)
	s2[3] = 13

	fmt.Println(s2)

}

输出结果:

[1 2 3 77 5 6 7 8]
[10 11 12 13]

4、切片的截取

在这里插入图片描述代码

package main

import "fmt"

func main() {
	s := []int{3, 5, 6, 7, 8, 9}
	//第一个值:截取的起始位置
	//第二个值:截取的终止位置(不包含该值的)
	//第三个值:用来计算容量,容量指的是切片中最多能够容纳多少元素。
	//容量=第三个值减去第一个值。
	//长度=第二个值减去第一个值
	s1 := s[0:3:5]
	fmt.Println("s1 == ", s1)
	fmt.Println("s1 len ==", len(s1))
	fmt.Println("s1 cap ==", cap(s1))

	s2 := s[3:]
	fmt.Println("s2 == ", s2)

	s3 := s[:3]
	fmt.Println("s3 == ", s3)

	s4 := s[1:3]
	fmt.Println("s4 == ", s4)
}

输出结果:

s1 ==  [3 5 6]
s1 len == 3   
s1 cap == 5   
s2 ==  [7 8 9]
s3 ==  [3 5 6]
s4 ==  [5 6] 

注意:切片截取后返回新切片,对新切片的值进行修改,会影响原切片

5、append函数使用

package main

import "fmt"

func main() {
	s := make([]int, 5, 8)
	s = append(s, 1)
	s = append(s, 2)
	s = append(s, 3)
	s = append(s, 4)
	fmt.Println("len =", len(s))
	//切片扩容:一般扩容方式为上一次:容量*2,如果超过1024字节每次扩容上一次的1/4
	fmt.Println("cap =", cap(s))
	fmt.Println(s)
}

输出结果:

len = 9
cap = 16            
[0 0 0 0 0 1 2 3 4]

6、copy函数使用

package main

import "fmt"

func main() {
	s1 := []int{1, 2}
	s2 := []int{3, 4, 5, 6, 7}
	copy(s1, s2)
	fmt.Println("s1 = ", s1)
}

输出结果为:

s1 =  [3 4]

7、切片的排序

package main

import "fmt"

func main() {
	var slice []int = []int{9, 1, 5, 6, 8, 3, 7, 2, 10, 4}

	for i := 0; i < len(slice)-1; i++ {
		for j := 0; j < len(slice)-1-i; j++ {
			if slice[j] > slice[j+1] {
				slice[j], slice[j+1] = slice[j+1], slice[j]
			}
		}
	}
	fmt.Println(slice)
}

输出结果为:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值