1.声明
map 声明需要指定组成元素 key 和 value 的类型,在声明后,会被初始化为 nil,表示
暂不存在的映射
2.初始化
a) 使用字面量初始化:map[ktype]vtype{k1:v1, k2:v2, …, kn:vn}
b) 使用字面量初始化空映射:map[ktype]vtype{ }
c) 使用 make 函数初始化
make(map[ktype]vtype),通过 make 函数创建映射
package main
import "fmt"
func main() {
var scores map[string]int
fmt.Printf("%T %#v\n", scores, scores)
fmt.Println(scores == nil)
//scores = map[string]int{}
scores = make(map[string]int)
fmt.Println(scores)
scores = map[string]int{"haha": 100, "www": 200}
fmt.Println(scores)
//增、删、改、查
//当通过key访问value的时候,如果key不存在,会返回value的当前类型的零值 例如value是int类型那么就是0
fmt.Println(scores["haha"])
fmt.Println(scores["aaa"])
//判断key是否存在于映射中
v, k := scores["abcd"]
fmt.Println(v, k)
//判断 k如果存在映射中 那么就打印value 当然v也可以用_来表示不要这个值 我只需要看key是否存在映射中
if k {
fmt.Println(scores["abcd"])
}
//if的另外一种书写方法,就是 if 后面跟初始化子语句;用分号分隔然后跟判断子语句
if v, k := scores["abcd"]; k {
fmt.Println(v, scores["abcd"])
}
//当key存在的时候 赋值是在修改value的值
//当key不存在的时候 赋值是 增加map的key
fmt.Println(scores)
scores["haha"] = 1
fmt.Println(scores)
scores["cc"] = 300
fmt.Println(scores)
//删除
delete(scores, "haha")
fmt.Println(scores)
//获取长度
fmt.Println(len(scores))
//遍历
//映射是无序的,存放的顺序跟你遍历顺序可能不同
for k, v := range scores {
fmt.Println(k, v)
}
//key至少可以有==和!=运算,相同修改,不同添加,bool,整数,字符串,数组
//value 是可以是任意类型
var info map[string]map[string]int
fmt.Println(info)
info = map[string]map[string]int{"aaa": {"age": 24, "xuehao": 22}}
fmt.Println(info["aaa"])
info["aaa"] = map[string]int{"aa": 222}
fmt.Println(info["aa"])
delete(info["aaa"], "aa")
fmt.Println(info["aaa"])
}