本文是李文周的博客go语言学习之路的目录提要版,方便复习查看使用,原文参见文章连接:
https://www.liwenzhou.com/posts/Go/go_menu/
Go语言中提供的映射关系容器为map
,其内部使用散列表(hash)
实现。
map是一种无序的基于key-value
的数据结构,Go语言中的map是引用类型,必须初始化才能使用。
map总结
map定义:
scoreMap := make(map[string]int, 8) scoreMap["张三"]=90
判断某个键是否存在
value,ok := map[key]
map的遍历:
for k,v := range scoreMap{
fmt.Println(k,v)
}
for k :=range scoeMap{
fmt.Println(k)
}
使用delete()函数删除键值对
delete(map, key)
元素为map类型的切片:
func main() {
var mapSlice = make([]map[string]string, 3)
for index, value := range mapSlice {
fmt.Printf("index:%d value:%v\n", index, value)
}
fmt.Println("after init")
// 对切片中的map元素进行初始化
mapSlice[0] = make(map[string]string, 10)
mapSlice[0]["name"] = "小王子"
mapSlice[0]["password"] = "123456"
mapSlice[0]["address"] = "沙河"
for index, value := range mapSlice {
fmt.Printf("index:%d value:%v\n", index, value)
}
}
值为切片类型的map
func main() {
var sliceMap = make(map[string][]string, 3)
fmt.Println(sliceMap)
fmt.Println("after init")
key := "中国"
value, ok := sliceMap[key]
if !ok {
value = make([]string, 0, 2)
}
value = append(value, "北京", "上海")
sliceMap[key] = value
fmt.Println(sliceMap)
}
当map的值为切片类型时,修改value的值的时候,要把值重新赋给map[key]
练习:
type Map map[string][]int
m := make(Map)
s := []int{1, 2}
s = append(s, 3)
fmt.Printf("%+v\n", s) // s: 1,2,3
m["q1mi"] = s // m["q1mi"]指向底层数组的引用
s = append(s[:1], 3) // s[:1]添加了一个3,则,底层数组变成1,3,3
fmt.Printf("%+v\n", s) // append方法返回了新的数组给s,s为1,3
fmt.Printf("%+v\n", m["q1mi"])// 之前的数组已经改为1,3,3