前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go语言基础5-数组、切片、容器

go语言基础5-数组、切片、容器

作者头像
吐吐吐吐吐葡萄皮
发布2019-04-04 15:03:41
3550
发布2019-04-04 15:03:41
举报
文章被收录于专栏:ai_houziai_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 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档