一、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