go语言容器
来源:     阅读:469
云上智慧
发布于 2020-04-24 18:39
查看主页
  1. 数组

    var arr [3]int // 数组的每个元素都会被初始化为改类型的零值var a [3]int = [3]int{1,2}a[2] // 0q := [...]int{1,2,3} // ...表示初始化时会根据初始值的个数确定数组的长度// 数组的长度是数组的一部分,必需是常量表达式,举例来说就是长度确定后不能再给它赋值

    比较两个数组能否相等,肯定要长度、类型、所有元素都相等时才会相等

    数组遍历

    var team [3]int = [3]int{1,2}team[2] = 3for k, v := range team {  fmt.Println(k,v)}

    多维数组

    var array [4][2]intarray = [4][2]int{{1,2}, {2,3}, {3,4}, {4,5}}// 公告并初始化索引为1,2的数组array = [4][2]int{1: {2,3}, 2: {3, 4}}// 按维度初始化数组中指定的元素array = [4][2]int{1: {0: 1}, 2: { 1: 4}}// 为元素赋值array[0][0] = 1

只需类型一致,多维数组可以相互赋值

  1. 切片

    切片默认指向一段连续内存区域,可以是数组,也可以是切片本身

    表示原有的切片:a := []int{1,2,3} fmt.Println(a[:]) // [1,2,3]

    使用a[0:0] // []`可以清空数组

    公告新的切片

    var stringList []string // 公告字符串切片 stringList == nil// 空切片var empty = []int // empty != nil

    切片是动态结构,只能与nil判定相等,不能互相判定相等,公告新的切片后,可以使用append()函数向切片中增加元素。

    使用内建函数make()构造切片

    提前分配空间,以降低屡次分配空间造成的性能问题,使用该函数生成切片必定发生了内存分配操作,但给定开始和结束为止的切片只是将新的切片结构指向已经分配好的内存区域,设定开始和结束位置,并不会发生内存分配操作。

    make ([]Type, size, cap)a = make([]int, 2, 10)

    使用append()为切片增加元素

   var a []int   a = append(a, 1, 2)   a = append(a, []int{1,2,3}...) // 直接追加切片时需要解包   a = append([]int{1,2,3}, a...) // 开开头增加切片   // 链式操作   a= append(a[:i], append([]int{1, 2, 3}, a[i:]...)...) // 在第i个位置插入切片

为切片增加元素时,假如空间不足,切片会自动扩容,容量会按原有容量的2倍进行扩充。1,2,4,8,16……

因为append()能返回新切片的特性,所以切片也支持链式操作。

切片复制

slice1 := []int{1,2,3,4}slice2 := []int{5,4,3,2,1}copy(slice1, slice2)fmt.Println(slice1) // [5,4,3,2]

切片删除

golang没有提供特定的接口,只能从切片本身的特性来删除元素,分别可以从开头位置删除、中间位置、尾部位置

a := []int{1,2,3}a = a[N:] // 删除开头N个元素// 或者者使用append()删除开头N个元素a = append(a[:0], append(a[:N])...)a = a[:copy(a, a[N:])] // 将N+之后的元素拷贝过来,之前的不要了// 删除中间N个元素a = append(a[:i], a[i+N:]...)a = a[:i+copy(a[i:], a[i+N:])]// 尾部删除a = a[:len(a) - N]// 删除指定元素str := []string{"a","b", "c", "d", "e"}index := 2str = append(str[:index], str[index + 1:]...)fmt.Println(str) // [a b d e]

多维切片

slice := [][]int{{1,2,3}, {1,2,3}}slice[0] = append(slice[0], 4)

多维切片操作起来会涉及众多的布局和值,相比于在函数间传递数据结构的复杂,切片因为本身结构简单的优势,在函数间传递消耗的成本很小。

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
Java学习到什么程度可以找第一份工作
容器与Cloud Native云原生应用基础修炼内容拓展
phpStudy环境安装SSL证书教程
华为外包/华为od/华为有啥区别,你了解多少?最详细的介绍看这里
程序员放弃阿里、拼多多去电信研究院,结果入职后感叹:我受骗了
首页
搜索
订单
购物车
我的