引用类型 一定要初始化 才可以使用
//map是引用类型
func map1() {
//声明一个map
var a map[string]int //nil
fmt.Println(a == nil) //true
//map的初始化
b := make(map[string]int, 5)
fmt.Println(b == nil) //false
//map 如何添加键值对
b["age"] = 100
b["age1"] = 200
fmt.Println(b) //map[age:100 age1:200]
fmt.Printf("%T\n", b) //map[string]int
fmt.Printf("%#v\n", b) //map[string]int{"age":100, "age1":200}
//声明 & 初始化
c := map[int]bool{
1: true,
2: false,
}
fmt.Println(c) //map[1:true 2:false]
fmt.Printf("%#v\n", c) //map[int]bool{1:true, 2:false}
//var d map[int]int
//d[100] = 100 //报错 因为没有初始化所以没有内存地址,所以不可以赋值
//判断某个键存在不?
var scoreMap = make(map[string]int, 8)
scoreMap["王二狗"] = 100
scoreMap["铁蛋"] = 80
// scoreMap["吴亦凡"] = 80
value, ok := scoreMap["吴亦凡"] //ok bool,value 值
if ok {
fmt.Println("吴亦凡 存在 scoreMap中 分数是", value)
} else {
fmt.Println("查无此人")
}
//遍历
for key, value := range scoreMap {
fmt.Println("姓名:", key, "分数:", value)
}
//仅仅遍历key
for key := range scoreMap {
fmt.Println("姓名:", key)
}
//仅仅遍历value
for _, value := range scoreMap {
fmt.Println("分数:", value)
}
//删除 键值对
delete(scoreMap, "王二狗")
fmt.Println(scoreMap) //map[铁蛋:80]
//按照某个固定顺序遍历map
var studentMap = make(map[string]int, 100)
for i := 0; i < 50; i++ {
key := fmt.Sprintf("stu%02d", i)
value := rand.Intn(100)
studentMap[key] = value
}
for key, value := range studentMap {
fmt.Println(key, value)
}
keys := make([]string, 0, 100)
for key, _ := range studentMap {
// fmt.Println((key))
keys = append(keys, key)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println("排序后key:", k, "排序后value:", studentMap[k])
}
//元素类型为map的切片 引用类型 一定要初始化 才可以使用
mapSlice := make([]map[string]int, 8, 8)
fmt.Println(mapSlice[0] == nil) //true 因为没有初始化 map
mapSlice[0] = make(map[string]int, 8)
mapSlice[0]["kobe"] = 100
fmt.Println(mapSlice) //[map[kobe:100] map[] map[] map[] map[] map[] map[] map[]]
//值为切片的map
sliceMap := make(map[string][]int, 8) //只 完成了 map的初始化
v, ok := sliceMap["中国"]
if ok {
fmt.Println(v)
} else {
sliceMap["中国"] = make([]int, 8) //初始化 切片
sliceMap["中国"][0] = 100
sliceMap["中国"][1] = 200
sliceMap["中国"][2] = 300
}
for k, v := range sliceMap {
fmt.Println(k, v)
}
//统计一个字符串每个单词出现的次数 how do you do?
var s = "how do you do"
words := strings.Split(s, " ")
wordMap := make(map[string]int, 10)
for _, word := range words {
value, ok := wordMap[word]
if ok {
wordMap[word] = value + 1
} else {
wordMap[word] = 1
}
}
fmt.Println(wordMap)
}