Go 基础教程--8-map

map

类似其它语言中的哈希表或者字典,以key-value形式存储数据
Key必须是支持==或!=比较运算的类型,不可以是函数、map或slice
Map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
Map使用make()创建,支持 := 这种简写方式

make([keyType]valueType, cap),cap表示容量,可省略
超出容量时会自动扩容,但尽量提供一个合理的初始值
使用len()获取元素个数

键值对不存在时自动添加,使用delete()删除某键值对
使用 for range 对map和slice进行迭代操作

实例1:

package main

import "fmt"

func main() {
    //var m map[int]string
    ////m = map[int]string{}
    //m = make(map[int]string)
    //fmt.Println(m)//map[]

    //var m map[int]string = make(map[int]string)
    //fmt.Println(m)//map[]

  m := make(map[int]string)
    fmt.Println(m)//map[]

  m := make(map[int]string)
    //fmt.Println(m)
    m[1] = "ok"
    a := m[1]
    fmt.Println(a)//ok
    fmt.Println(m)//map[1:ok]

    m := make(map[int]string)
    a := m[1]
    fmt.Println(a)//
}


实例2:

package main

import "fmt"

func main() {
    m := make(map[int]string)
    m[1] = "ok"
    delete(m,1)
    a := m[1]
    fmt.Println(a)
}
//

实例3:

多级map都需要初始化

package main

import "fmt"

func main() {
    var  m map[int]map[int]string
    m  = make(map[int]map[int]string)
    a, ok := m[2][1]
    if !ok {
        m[2] = make(map[int]string)
    }
    m[2][1] = "good"
    a, ok = m[2][1]
    fmt.Println(a,ok)
}
//good true

实例4:

迭代操作

package main

import "fmt"

func main() {
    //for  k,v := range map {
    //    map[k][v]
    //}
    sm := make([]map[int]string,5)
    for _, v := range sm {
        v = make(map[int]string,1)
        fmt.Println(v)
    }
    fmt.Println(sm)
}
//--
map[]
map[]
map[]
map[]
map[]
[map[] map[] map[] map[] map[]]
--//

//说明v是拷贝,没有改变值
sm := make([]map[int]string,5)
    for _, v := range sm {
        v = make(map[int]string,1)
        v[1] = "ok"
        fmt.Println(v)
    }
    fmt.Println(sm)
    //map[1:ok]
    //map[1:ok]
    //map[1:ok]
    //map[1:ok]
    //map[1:ok]
    //[map[] map[] map[] map[] map[]]

实例2:

package main

import (
    "fmt"
    "sort"
)

func main() {
    //for  k,v := range map {
    //    map[k][v]
    //}

    //sm := make([]map[int]string,5)
    //for _, v := range sm {
    //    v = make(map[int]string,1)
    //    v[1] = "ok"
    //    fmt.Println(v)
    //}
    //fmt.Println(sm)
    //map[1:ok]
    //map[1:ok]
    //map[1:ok]
    //map[1:ok]
    //map[1:ok]
    //[map[] map[] map[] map[] map[]]

    //sm := make([]map[int]string,5)
    //for i := range sm {
    //    sm[i] = make(map[int]string,1)
    //    sm[i][1] = "ok"
    //    fmt.Println(sm[i])
    //}
    //fmt.Println(sm)
    //map[1:ok]
    //map[1:ok]
    //map[1:ok]
    //map[1:ok]
    //map[1:ok]
    //[map[1:ok] map[1:ok] map[1:ok] map[1:ok] map[1:ok]]

    //间接排序
    m := map[int]string{1:"a",2:"b",3:"c",4:"d",5:"e"}
    s := make([]int,len(m))
    i := 0
    for k, _ := range m  {
        s[i] = k
        i++
    }
    sort.Ints(s)
    fmt.Println(s)
    //[1 2 3 4 5]
}

课堂作业

根据在 for range 部分讲解的知识,尝试将类型为map[int]string
的键和值进行交换,变成类型map[string]int
程序正确运行后应输出如下结果:

package main

import "fmt"

func main() {
    m1 := map[int]string{1:"a",2:"b",3:"c",4:"d",5:"e"}
    fmt.Println(m1)
    m2 := make(map[string]int)
    for k,v := range m1 {
        m2[v] = k
    }
    fmt.Println(m2)
}

//map[1:a 2:b 3:c 4:d 5:e]
//map[a:1 b:2 c:3 d:4 e:5]
go
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!