2-内建容器

2 篇文章 0 订阅

内建容器(数据结构)

一、数组

  1. 数组的定义:

    数量写在类型的前面

    var array1 [5]int
    array2 := [3]int{1, 2, 3}
    array3 := [...]int{2, 4, 5, 6, 6} //...符号不能省略,否则等于定义了切片
    var grid [4][5]bool //四个长度为5的bool数组
    
  2. 数组在传递参数时是值传递,因此函数中对数组做修改不影响原数组。

  3. [10]int 和 [20]int 是不同类型,值是数组类型的一部分

  4. 调用func f(arr [10]int) 会拷贝数组

  5. 在go语言中一般不直接使用数组

二、切片Slice

slice内部是对数组的一个视图。

slice的扩展
arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8}
s1 := arr[2:6]
s2 := s1[3:5]
  • s1的值为[2, 3, 4, 5], s2的值为 [5, 6]
  • slice的值可以向后扩展,不可以向前扩展
  • s[i]不可以超越len(s),向后扩展不可以超越底层数组cap(s)
向slice添加元素
  • 添加元素时如果超越cap,系统会重新分配更大的底层数组
  • 由于扩展时是值传递的关系,扩展后的结果放在append的返回值
  • s = append(s, val)

三、Map的学习

go语言中map的标准定义示例:

m := map[string]string {
    "name": "ccmouse",
    "course": "golang",
    "site": "imooc",
    "quality": "notbad",
}

在map中,值类型可以为另一个map,即值类型可以嵌套。

map[K]V, map[K1]map[K2]V

3.1 map的基础使用
  1. 创建用make

    m := make(map[string]string)
    
  2. 获取元素

    name := m[string]
    
  3. 删除键值直接用delete函数

    delete(m, "name")
    
  4. 当获取key所对应的value时,如果值不存在,则返回value类型的初始值,不会报错,可以用下面的方法判断key是否存在于map中。

    name, ok := m["name"] //ok的类型为bool型
    
3.2 map中key的类型限制
  1. map底层逻辑是使用哈希表,必须可以比较相等。
  2. 除了slice,map,function的内建类型都可以作为key
  3. Struct类型不包括上述字段,也可以作为key。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值