关于golang:Golangmap

12次阅读

共计 1595 个字符,预计需要花费 4 分钟才能阅读完成。

map

1. 概念:Go 语言中 map 是一种非凡的数据结构,一种元素对(pair)的无序汇合,蕴含一个 key 和 value 值,被称为关联数组或字典。
2. 初始化
3. 判空
4. 遍历: 个别遍历与条件遍历
5. 删除
6. 查 若在 map 中找不到某个 key,则返回 key 对应类型的零值,e.g. int 对应 0,string 对应空,bool
7. 元素类型为 map 的 slice
8. 元素类型为 slice 的 map

练习题: 统计 how do you do 中每个单词呈现的次数

package main

import ("fmt")

func main() {

    // 初始化
    var a = make(map[string]int)
    a["勇者的等级"] = 10 // 赋值
    a["勇者的 HP"] = 107
    a["勇者的 MP"] = 55
    a["勇者的攻击力"] = 99
    a["勇者的防御力"] = 99
    fmt.Println(a)

    // 判空
    // 常设变量 ok 来判空
    v, ok := a["勇者的颜值"]
    if !ok {fmt.Println("无此属性")
    } else {fmt.Println(v)
    }
    fmt.Println(a["勇者的颜值"]) // 查无此 key,则返回值为 int 的零值

    // 遍历
    //1. 个别遍历 for range
    for v, k := range a {fmt.Println(v, k)
    }
    //2. 条件遍历
    // 步骤: 将 key 存入切片,用 sort 对该切片进行排序,再存入 map,最初遍历

    // 删除
    fmt.Println(a)
    delete(a, "勇者的防御力")
    fmt.Println(a)

    // 元素类型为 map 的 slice
    A := make([]map[string]int, 4, 4)
    fmt.Println(A)
    A[0] = a
    fmt.Println(A)

    // 元素类型为 slice 的 map
    B := make(map[string][]string, 2)
    fmt.Println(B)
    B["援救公主的壮士"] = []string{"莱安", "杜鲁特"}
    fmt.Println(B)
    //vs code 下如果不对外部的 slice 或 map 进行初始化,则会报错

    // 练习题对 "to be or not to be" 的每个单词呈现的次数进行统计

    C := make(map[string]string)
    C["单词 1"] = "to"
    C["单词 2"] = "be"
    C["单词 3"] = "or"
    C["单词 4"] = "not"
    C["单词 5"] = "to"
    C["单词 6"] = "be"
    count1 := 0
    count2 := 0
    count3 := 0
    count4 := 0
    for _, k := range C {
        if k == "to" {count1++} else if k == "be" {count2++} else if k == "or" {count3++} else if k == "not" {count4++}
    }
    fmt.Println(C)
    fmt.Println("to:", count1)
    fmt.Println("be:", count2)
    fmt.Println("or:", count3)
    fmt.Println("not:", count4)
}

运行后果:

map[勇者的 HP:107 勇者的 MP:55 勇者的攻击力:99 勇者的等级:10 勇者的防御力:99]
无此属性
0
勇者的防御力 99
勇者的等级 10
勇者的 HP 107
勇者的 MP 55
勇者的攻击力 99
map[勇者的 HP:107 勇者的 MP:55 勇者的攻击力:99 勇者的等级:10 勇者的防御力:99]
map[勇者的 HP:107 勇者的 MP:55 勇者的攻击力:99 勇者的等级:10]
[map[] map[] map[] map[]]
[map[ 勇者的 HP:107 勇者的 MP:55 勇者的攻击力:99 勇者的等级:10] map[] map[] map[]]
map[]
map[援救公主的壮士:[ 莱安 杜鲁特]]
map[单词 1:to 单词 2:be 单词 3:or 单词 4:not 单词 5:to 单词 6:be]
to: 2
be: 2
or: 1
not: 1
正文完
 0