map

  1. 概念:Go语言中 map 是一种特殊的数据结构,一种元素对(pair)的无序集合,包含一个key和value值,被称为关联数组或字典。
  2. 初始化
  3. 判空: !ok
  4. 遍历: 一般遍历、条件遍历
  5. 删除
  6. 查: 若在map中找不到某个key,则返回key对应类型的零值,e.g. int对应0,string对应空,bool对应false
  7. slice与map的组合
  8. 练习题:字符统计和回文判断
package main

import (
    "fmt"
    "strings"
)

func main() {

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

    //判空
    //设变量名为ok的布尔值来判空,注意这里的ok仅是布尔型,和创建map时初始化的数据类型无关!!!
    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)

    //slice与map的组合
    //元素类型为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进行初始化,则会报错

    //练习题
    //对字符串中出现的单词出现次数进行统计
    s2 := "the beauty of summer is transient,but poetry can last forever"
    s3 := strings.Split(s2, " ")   //以空格切割字符串,并存入切片s3
    m1 := make(map[string]int, 10) //创建一个map,变量名为m1
    for _, w := range s3 {         //对切片s3遍历,并将切片中的value存入w
        if _, ok := m1[w]; !ok { //用布尔ok对m1进行判空,循环的第一步:m1中不存在["how"],所以ok为零值
            m1[w] = 1 //将w存入m1,并赋值为1
        } else {
            m1[w]++ //若m1中存在w,则使m1[w]的值增加1
        }
    }
    for v, k := range m1 { //对m1遍历打印
        fmt.Println(v, k)
    }

    //回文判断
    E := "上海自来水来自海上"
    R := make([]rune, 0, len(E))
    for _, i := range E {
        R = append(R, i)
    }
    for i := 0; i < len(R); i++ {
        if R[i] != R[len(R)-1-i] {
            fmt.Println("E不是回文")
            return
        }

    }
    fmt.Println(R)
    fmt.Println("E是回文")
}

运行结果:

map[勇者的HP:107 勇者的MP:55 勇者的攻击力:99 勇者的等级:10 勇者的防御力:99]
10
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[拯救公主的勇士:[莱安 杜鲁特]]
is 1
forever 1
last 1
the 1
beauty 1
of 1
summer 1
transient,but 1
poetry 1
can 1
[19978 28023 33258 26469 27700 26469 33258 28023 19978]
E是回文

扒手莫扎特
1 声望0 粉丝

« 上一篇
Golang-function
下一篇 »
Golang-unicode