吐吐吐吐吐葡萄皮
go语言基础5-数组、切片、容器
关注作者
前往小程序,Get
更优
阅读体验!
立即前往
腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
文章/答案/技术大牛
搜索
搜索
关闭
发布
首页
学习
活动
专区
圈层
工具
返回腾讯云官网
吐吐吐吐吐葡萄皮
首页
学习
活动
专区
圈层
工具
返回腾讯云官网
社区首页
>
专栏
>
go语言基础5-数组、切片、容器
go语言基础5-数组、切片、容器
吐吐吐吐吐葡萄皮
关注
发布于 2019-04-04 15:03:41
发布于 2019-04-04 15:03:41
375
0
举报
文章被收录于专栏:
ai_houzi
ai_houzi
数组 实例 var arr1 [5]int //定义长度为5的数组 arr2 := [3]int{1,2,3} //使用:时需要赋值 arr3 := [...]int{2,3,4,5} //可变长度 var grid [4][5]int //二维数组
数组类型是值类型
调用func f(arr [10]int) 会拷贝数组
go语言中一般不直接使用数组
切片(Slice) 实例 arr := [...]int{0,1,2,3,4,5,6,7} s := arr[2:6] //s即为切片,值为[2 3 4 5] //Slice的写法 arr[2:6]= [2 3 4 5] arr[:6]= [0 1 2 3 4 5] arr[2:]= [2 3 4 5 6 7] arr[:]= [0 1 2 3 4 5 6 7] //---------------------------------------------- //slice的扩展 arr := [...]int{0,1,2,3,4,5,6,7} s1 := arr[2:6] s2 := s1[3:5] //s1[2,3,4,5] //s2[5,6] //s[i]不可超越len(s),向后扩展不可超越底层数组cap(s) arr = [0 1 2 3 4 5 6 7] s1 = [2 3 4 5],len(s1) = 4, cap(s1) = 6 s2 = [5,6],len(s2) = 2 ,cap(s2) = 3 //---------------------------------------------- //slice添加元素 arr := [...]int{0,1,2,3,4,5,6,7} s1 := arr[2:6] s2 := s1[3:5] s3 := append(s2, 10) s4 := append(s3, 11) s5 := append(s4, 12) s3, s4, s5 = [5 6 10] [5 6 10 11] [5 6 10 11 12] arr = [0 1 2 3 4 5 6 10] //---------------------------------------------- //创建 slice var s []int //初始值为nil s1 := []int{1,2,3,4} s2 := make([]int,16) //创建cap为16的slice s3 := make([]int, 10, 32) //创建len=10,cap=32的slice //---------------------------------------------- //copy slice var s []int //初始值为nil s1 := []int{1,2,3,4} s2 := make([]int,16) //创建cap为16的slice s3 := make([]int, 10, 32) copy(s2,s1) //s2 = [2 4 6 8 0 0 0 0 0 0 0 0 0 0 0 0] //---------------------------------------------- //删除元素 //删除上面s2中的8 s2 = append(s2[:3],s2[4:]...) //删除头元素 front := s2[0] s2 = s2[1:] //删除尾元素 tail := s2[len(s2)-1] s2 = s2[:len(s2)-1] slice扩容 func main() { var s []int for i := 0; i < 100; i++ { printSlice(s) s = append(s,i*2) } fmt.Println(s) } func printSlice(s []int) { fmt.Printf("len = %d,cap = %d\n",len(s),cap(s)) } //--------------------输出---------------------- len = 0,cap = 0 len = 1,cap = 1 len = 2,cap = 2 len = 3,cap = 4 len = 4,cap = 4 len = 5,cap = 8 len = 6,cap = 8 len = 7,cap = 8 len = 8,cap = 8 len = 9,cap = 16 。 。 len = 16,cap = 16 len = 17,cap = 32 len = 18,cap = 32 。 。 len = 62,cap = 64 len = 63,cap = 64 len = 64,cap = 64 len = 65,cap = 128 len = 66,cap = 128 len = 67,cap = 128 。 。 len = 98,cap = 128 len = 99,cap = 128
slice可以向后扩展,但不可以向前扩展
s[i]不可超越len(s),向后扩展不可超越底层数组cap(s)
添加元素时如果超越cap,系统会重新分配更大的底层数组
由于值传递的关系,必须接收append的返回值
容器 map实例 m := map[string] string { "name":"ai-houzi" } map[k]v map[k1]map[k2]v //符合map m2 := make(map[string]int) //m2 == empty map var m3 map[string]int //m3 == nil
创建:make(map[string]int)
获取元素:m[key]
key不存在时,获得value类型的初始值
用value,ok := m[key]来判断是否存在key
用delete删除一个元素
使用range便利key,或者遍历key, value对
不保证遍历顺序,需手动对key排序
使用len获得元素个数
map使用哈希表,必须可以比较相等
除了slice, map, function的内建类型都可以作为key
Struts类型不包含上述字段,也可以作为key
本文参与
腾讯云自媒体同步曝光计划
,分享自作者个人站点/博客。
原始发表:2018-07-09,如有侵权请联系
cloudcommunity@tencent.com
删除
前往查看
编程算法
本文分享自
作者个人站点/博客
前往查看
如有侵权,请联系
cloudcommunity@tencent.com
删除。
本文参与
腾讯云自媒体同步曝光计划
,欢迎热爱写作的你一起参与!
编程算法
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐