美文网首页
10 Golang map的正确使用姿势

10 Golang map的正确使用姿势

作者: learninginto | 来源:发表于2021-03-23 09:52 被阅读0次

map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。

map[KeyType]ValueType
  • 其中:
  1. KeyType表示键的类型; ValueType表示键对应的值的类型
  2. map类型的初始值为nil,需要使用make()函数来分配内存。
make:用于slice,map和channel的初始化
  • make创建map类型的数据
var userInfo = make(map[string]string)
userInfo["username"]="张三"
userInfo["age"]="20"
userInfo["sex"]="男"
fmt.Println(userInfo)//map[age:20 sex:男 username:张三]
fmt.Println(userInfo["username"])//张三
  • map也支持声明的时候填充元素
var userInfo = map[string]string{
    "username":"张三",
    "age":"20",
}

注意:最后一项的value值后面加逗号

  • 第三种,初始化时简写
userInfo := map[string]string{
    "username":"张三",
    "age":"20",
    "sex":"男"
}
map数据的循环遍历
  • for range
var userInfo = map[string]string {
    "username":"张三",
    "age":"20",
    "sex":"男"
}

for k,v := range userInfo {
    fmt.Printf("key:%v value:%v\n", k, v)
}
//key:username value:张三
//key:age value:20
//key:sex value:男
map类型数据的curd
var userInfo = make(map[string]string)
userInfo["username"] = "张三"
userInfo["age"] = "20"

value, ok := userInfo["age"]
value1, ok1 : userInfo["age1"]
fmt.Println(value,ok)//20,true
fmt.Println(value1,ok1)// (空)false
使用delete()函数删除键值对

delete(map对象, key)
1.map对象:表示要删除键值对的map对象
2.key:表示要删除键值对的键

var userInfo = map[string]string {
    "username":"张三",
    "age":"20",
    "sex":"男"
}
delete(userInfo,sex)
元素为map类型的切片

我们想在切片里放一系列用户的信息,这时候可以定义一个元素为map类型的切片

var userInfo = make([]map[string]string,3,3)
fmt.Println(userInfo[0])//map[]
fmt.Println(userInfo[0] == nil)//true
if userInfo[0] == nil {
    userInfo[0] = make(map[string]string)
    userInfo[0]["username"] = "张三"
}
if userInfo[1] == nil {
    userInfo[1] = make(map[string]string)
    userInfo[1]["userName"] = "李四"
}
fmt.Println(userInfo)
//[map[username:张三] map[username:李四] map[]]
  1. map的默认值为nil
  2. 最后有一个空map,是因为刚开始创建的userInfo分配的长度和存储空间为3

通过循环遍历map数据

for _, v := range userInfo {
    fmt.Println(v)
    for key, value := range v {
        fmt.Printf("key:%v--value:%v",key,value)
    }
}
//map[username:张三]
//key:username--value:张三
//map[username:李四]
//key:username--value:李四
值为切片类型的map
var userInfo = make(map[string][]string)
userInfo["hobby"] = []string{
 "吃饭",
 "睡觉",
 "打豆豆",
}
fmt.Println(userInfo)
//map[hobby:[吃饭 睡觉 打豆豆]]
map的排序
map1 := make(map[int]int, 10)
map1[10] = 100
map1[1] = 13
map1[4] = 56
map1[8] = 90
fmt.Println(map1)//map[1:13 4:45 8:90 10:100]
for key,val := range map1 {
    fmt.Println(key,val)
}
//1 13
//4 56
//10 100
//8 90

按照key升序输出map的key和value,先把map的key放在切片中升序排序,循环遍历key输出map的值

var keySlice []int
for key,val := range map1 {
    keySlice = append(keySlice, key)
}
sort.Ints(keySlice)
fmt.Println(keySlice)//[1 4 8 10]
for _, v := range keySlice {
    fmt.Printf("key=%v value=%v",v,map1[v])
}
//key=1 value=13
//key=4 value=56
//key=8 value=90
//key=10 value=100

统计一个字符串中每个单词出现的次数,比如"how do you do"中how=1 do=2 you=1

var str = "how do you do"
var strSlick = strings.Split(str," ")//返回值为切片
fmt.Println(strSlice)//[how do you do]
var strMap = make(map[string]int)
for _,var := range strSlice {
    strMap[v]++;
}
fmt.Println(strMap)//map[do:2 how:1 you:1]

相关文章

  • 10 Golang map的正确使用姿势

    map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。 其中: K...

  • Golang使用Map的正确姿势

    初始化后再使用 Golang中,map是引用类型,如切片一样,通过下面的代码声明后指向的是nil,所以千万别直接声...

  • Golang之Map源码

    引用 深入 Go 的 Map 使用和实现原理 哈希表 深度解密Go语言之map Golang map 的底层实现 使用

  • Go map底层实现

    golang map源码详解Golang map 如何进行删除操作?

  • (九)golang sync map 源码分析

    golang中的map是不支持并发操作的,golang推荐用户直接用读写锁对map进行保护,也有第三方类库使用分段...

  • 剖析golang map的实现

    [TOC] 本文参考的是golang 1.10源码实现。 golang中map是一个kv对集合。底层使用hash ...

  • Golang:map

    map golang 中提供映射关系容器为map,其内部使用散列表(hash)实现 map 是一种无序的基于key...

  • golang map遍历为什么是无序的?

    golang map遍历为什么是无序的? 遍历map map底层使用哈希表实现,在运行过程中会进行扩容,扩容后顺序...

  • golang语言map的并发和排序

    golang语言map的并发和排序 map的并发问题 golang缺省的map不是thread safe的,如果存...

  • Golang对MySQL的封装

    Golang操作MySQL的正确姿势https://www.jianshu.com/p/3ec3df7103cf

网友评论

      本文标题:10 Golang map的正确使用姿势

      本文链接:https://www.haomeiwen.com/subject/iawxhltx.html