一、map介绍
1、map说明
- map是一种无须的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用
- Go语言中map的定义语法如下:map[KeyType]ValueType
- 其中
- KeyType:表示键的类型
- ValueType:表示键对应的值的类型
- map类型的变量默认初始值为nil,需要使用make()函数来分配内存
- 其中cap表示map的容量,该参数虽然不是必须的
- 注意:获取map的容量不能使用cap,cap返回的是数组切片分配的空间大小,根本不能用于map
- 要获取map的容量,可以用len函数
2、定义map
1、map定义:方法1
package mainimport "fmt"func main() {scoreMap := make(map[string]int,8)scoreMap["snail"]=100scoreMap["pupu"]=90fmt.PrintIn(scoreMap) //map[snail:100 pupu:90]fmt.PrintIn(scoreMap["snail"]) //100fmt.Printf("type of a:%T\n",scoreMap) //type of a:map[string]int
}
2、map定义:方法2
package main
import ("fmt"
)
func main() {userInfo := map[string]string{"username": "IT Snail","password": "123456",}fmt.Println(userInfo) // map[password:123456 username:IT Snail]
}
3、map 嵌套 map
package mainimport "fmt"func main() {var mapSlice = make([]map[string]string,3)for index, value := range mapSlice {fmt.Printf("index:%d value:%v\n",index,value)}fmt.PrintIn("################### after init ################")mapSlice[0] = make(map[string]string,10)mapSlice[0]["name"] = "Snail"mapSlice[0]["password"] = "123456"mapSlice[0]["address"] = "浦东新区"for index, value := range mapSlice {fmt.Printf("index:%d,value:%v\n",index,value)}
}
/*
index:0 value:map[]
index:1 value:map[]
index:2 value:map[]
#################### after init ################
index:0 value:map[address:海淀区 name:小王子 password:123456]
index:1 value:map[]
index:2 value:map[]*/
三、map 基本使用
1、判断某个建是否存在
package main import "fmt"func main() {userInfo := map[string]string{"username":"Snail","password":"123456",}v,ok := userInfo["username"]if ok {fmt.PrintIn(v) //Snail}else {fmt.PrintIn("map中没有此元素")}
}
2、delete()函数
- 使用的delete()内建函数从 map 中删除一组键值对,delete()函数的格式如下:delete(map对象 key)
- 其中
- map 对象:表示要删除键值对的 map 对象
- key:表示要删除的键值对的键
package mainimport "fmt"func main() {scoreMap :=make(map[string]int)ScoreMap["pupu"]=90ScoreMap["Snail"]=100scoreMap["白河车"]= 70delete(scoreMap,"Snail") //将 Snail:100 从 map 中删除for k,v := range ScoreMap{fmt.PrintIn(k,v)}
}
/*
pupu 90
白河车 70
*/
四、map 遍历
1、遍历 key 和 value
package mainimport "fmt"func main() {scoreMap :=make(map[string]int)ScoreMap["pupu"]=90ScoreMap["Snail"]=100scoreMap["白河车"]= 70for k,v := range ScoreMap{fmt.PrintIn(k,v)}
}
/*
pupu 90
Snail 100
白河车 70
*/
2、只遍历 key
- 注意:遍历 map 时的元素顺序余添加键值对的顺序无关
package mainimport "fmt"func main() {scoreMap :=make(map[string]int)ScoreMap["pupu"]=90ScoreMap["Snail"]=100scoreMap["白河车"]= 70for k,v := range ScoreMap{fmt.PrintIn(k)}
}
/*
pupu
Snail
白河车
*/
3、顺序遍历 map
package main
import ("fmt""sort"
)
func main() {// 第一:生成字典,scoreMapvar scoreMap = make(map[string]int, 200)for i := 0; i < 10; i++ {key := fmt.Sprintf("stu%02d", i) //生成 stu 开头的字符串scoreMap[key] = i}// 第二:取出 map 中的所有 key 存入切片 keysvar keys = make([]string, 0, 200)for key := range scoreMap {keys = append(keys, key)}// 第三:对切片进行排序sort.Strings(keys)// 第四:按照排序后的 key 遍历 mapfor _, key := range keys {fmt.Println(key, scoreMap[key])}
}
/*
stu00 0
stu01 1
stu02 2
stu03 3
stu04 4
stu05 5
stu06 6
stu07 7
stu08 8
stu09 9*/