Go 学习笔记 05 | map 详解

一、map 详解

make 创建 map 类型的数据:

package main

import (
	"fmt"
)

func main() {
	var userinfo = map[string]string{
		"username": "张三",
		"age": "20",
		"sex": "男",  //这也要写,
	}
	fmt.Println(userinfo)
}

输出:

map[age:20 sex:男 username:张三]

for range 循环遍历 map 类型的数据。

map 类型数据的 curd

package main

import (
	"fmt"
)

func main() {
    // 创建 map 类型的数据
	var userinfo = make(map[string]string)
	userinfo["username"] = "张三"
	userinfo["age"] = "20"
	fmt.Println(userinfo)
    // 修改 map 类型的数据
    userinfo["username"] = "李四"
    fmt.Println(userinfo)
    // 查找 map 类型的数据
    v, ok := userinfo["age"]
    fmt.Println(v, ok)
    // 删除 map 类型的数据
	delete(userinfo, "age")
	fmt.Println(userinfo)
}

输出:

map[age:20 username:张三]
map[age:20 username:李四]
20 true
map[username:李四]

map 和切片结合

package main

import (
	"fmt"
)

func main() {
    var userinfo = make(map[string][]string)  // 切片 []string 是一个整体

	userinfo["hobby"] = []string{
		"吃饭",
		"睡觉",
		"敲代码",
	}

	userinfo["work"] = []string{
		"php",
		"golang",
		"python",
	}

	for k, v := range userinfo {
		fmt.Println(k, v)
		for _, value := range v {
			fmt.Println(value)
		}
	}
}

输出:

hobby [吃饭 睡觉 敲代码]
吃饭
睡觉
敲代码
work [php golang python]
php
golang
python

map 类型也是引用数据类型,改变变量副本值会影响变量本身的值。

二、map 的排序

package main

import (
	"fmt"
    "sort"
)

func main() {
    map1 := make(map[int]int, 10)
	map1[10] = 100
	map1[1] = 13
	map1[4] = 56
	map1[8] = 90

	for key, val := range map1 {
		fmt.Println(key, val)
	}

	//按照 key 升序输出 map 的 key=>value

	//1、把 map 的 key 放在切片里面
	var keySlice []int
	for key, _ := range map1 {
		keySlice = append(keySlice, key)
	}
	fmt.Println(keySlice)

	//2、让 key 升序排序
	sort.Ints(keySlice)
	fmt.Println(keySlice)
    
    //3、循环遍历 key 输出 map 的值
	for _, v := range keySlice {
		fmt.Printf("key=%v value=%v\n", v, map1[v])
	}
}

输出:

4 56
10 100
1 13
8 90
[4 10 1 8]
[1 4 8 10]
key=1 value=13
key=4 value=56
key=8 value=90
key=10 value=100

map 实例:计数统计

package main

import (
	"fmt"
    "strings"
)

func main() {
    var str = "how do you do"
	var strSlice = strings.Split(str, " ")
	fmt.Println(strSlice)

	var strMap = make(map[string]int)
	for _, v := range strSlice {
		strMap[v]++
	}
	fmt.Println(strMap)
}

输出:

[how do you do]
map[do:2 how:1 you:1]

三、参考教程

Golang 教程 P22-P23

posted @ 2020-11-21 20:16  Wonz  阅读(101)  评论(0)    收藏  举报