golang学习系列——19. map

目录

 

一. 概念

二. 声明和初始化

1. 声明方式

2. 初始化

三. 使用方法

1. 测试key是否存在

2. 删除元素

3. for-range

4. map 的排序

5. 将 map 的 key, value 互换

四. 使用注意


一. 概念

map 是一种特殊的数据结构: 一种键值对的无序集合, 可以根据给定的 key 快速的定位对应的value.

在 Go 语言中 map 是一种内建的引用类型

二. 声明和初始化

1. 声明方式

声明方式如下: 声明的时候不需要知道 map 的长度, 因为 map 可以动态增长

//var mapname map[keytype]valuetype
var map1 map[string]int64

2. 初始化

未初始化的 map 的值是 nil , 不可以直接使用.

map 是引用类型的: 内存分配使用 make() 方法,  不能使用 new() 来构造map

// map 的初始化
var map1 = make(map[keytype]valuetype)
map1 := make(map[keytype]valuetype)
// 这样子也是可以的
map1 := map[int]string{1:"string", 2:"hello"}

三. 使用方法

1. 测试key是否存在

//如果key存在, ok 为 true, value为对应的值, 否则 ok 为 false
value, ok := map1[key]
//只是判断 key 是否存在
if _, ok := map1[key]; ok {
    //todo
}

2. 删除元素

//从 map1 中删除 key, 如果不存在不会报错
delete(map1, key)

3. for-range

k, v 分别代表 map 中的一对 pair 的键/值, 都是 for 循环内的局部变量

注意: map 是无序的, 没有按照 key 或者 value 来排序

 

for k, v := range map1 {
    //todo
}

4. map 的排序

如果想要为 map 排序 (key 或者 value), map本身是做不到的, 所以要借助其他方式.

将 key/value 拷贝到一个切片, 再对切片进行排序 (使用 sort 包, 见上一篇 18. 数组和切片), 然后再用 for-range 遍历切片, 配合map得到一组有序的数据.

5. 将 map 的 key, value 互换

如果 value 值可以作为 key 并且是唯一的, 我们可以很方便的做到键值互换

map1 := make(map[int]string)
// init map1
invMap := make(map[string]int)

for k, v := range map1 {
    invMap[v] = k
}

四. 使用注意

1. map 可以动态调整大小, 没有固定长度或者最大限制. 但是可以标明初始容量 make(map[keytype]valuetype, cap)

2. key 可以是任何可以用 == 或者 != 操作符比较的类型, 比如 string, int, float.  数组, 切片不能作为key, 当使用结构体作为 key 的时候, 结构体内的元素必须全部是可以用 == 或者 != 操作符比较的类型

3. value 可以是任意类型; 我们可以通过使用空接口类型, 存储任何类型的值, 使用这种类型作为值时需要先做一次类型断言

4. map 也可以用函数作为自己的值, 这样就可以用来做分支结构, 用 key 来选择要执行的函数

5. 可以使用 len(map) 来获得 map 中的 pair 数量.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值