美文网首页
Go语言之集合(Map)

Go语言之集合(Map)

作者: 测试探索 | 来源:发表于2020-05-29 06:52 被阅读0次

    map是Go中的内置类型,它将一个值与一个键关联起来,可以使用响应的键检索值
    Map是一种无序的键值对的集合,Map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值

    一:注意事项
    • map是无序的,每次打印出来的map都会不一样,必须通过key获取
    • map的长度是不固定的,也就是和slice一样,也是一种引用类型
    • 内置的len


      image.png
    二:获取

    value,ok := map[key]
    根据key获取对应的value,如果key存在,value就是对应的数据,ok为true,如果key不要存在,value就是值类型的默认值,ok为false

    三: 删除

    如果key存在,直接删除数据,如果key不存在,删除失败

    package main
    
    import "fmt"
    
    func main() {
        //1.创建map
        //只是声明,没有初始化,nil,如果不初始化map,那么就会创建一个nil map,nil map不能用来存放键值对
        var map1 map[int]string
        var map2 = make(map [int] string)
        var map3 = map[string] int {"Go":98,"Python":87,"java":79,"html":93}
        fmt.Println("map1",map1)
        fmt.Println("map2",map2)
        fmt.Println("map3",map3)
    
    //  nil map
    //  判断是否是nil
        fmt.Println("map1是否是nil:",map1 == nil)
        fmt.Println("map2是否是nil:",map2 == nil)
        fmt.Println("map3是否是nil:",map3 == nil)
    
    //  3.存储键值对到map中
    //  map[1]key = value
        map2[1] = "hello"
        map2[2] = "world"
        map2[3] = "王二狗"
        map2[4] = "rudy"
        map2[5] = "好好好"
        map2[6] = ""
    
    //  获取数据
        fmt.Println("map2[4]的值是:",map2[4])
        fmt.Println("map2[40]的值是:",map2[40])
    
        v1,ok := map1[40]
        if ok {
            fmt.Println("map1[40]对应的数值是:",v1)
        } else {
            fmt.Println("map1[40]操作的key不存在,获取到的是零值")
        }
    
    //  删除数据
        delete(map2,3)
        fmt.Println(map2)
    
    }
    //结果
    map1 map[]
    map2 map[]
    map3 map[Go:98 Python:87 html:93 java:79]
    map1是否是nil: true
    map2是否是nil: false
    map3是否是nil: false
    map2[4]的值是: rudy
    map2[40]的值是: 
    map1[40]操作的key不存在,获取到的是零值
    map[1:hello 2:world 4:rudy 5:好好好 6:]
    
    
    三、遍历Map
    package main
    
    import (
        "fmt"
        "sort"
    )
    
    func main() {
        map1 := make(map [int] string )
    
        map1[5] = "hello"
        map1[6] = "world"
        map1[7] = "王二狗"
        map1[8] = "rudy"
        map1[9] = "好好好"
    
        for i,v := range map1 {
            fmt.Println(i,v)
        }
    
        fmt.Println("--------------------")
        for i:= 1;i<=len(map1);i++{
            fmt.Println(i,"--->",map1[i])
        }
    
        /*
        第二种方式
        1.获取所有的key--》切片/数组
        2.进行排序
        3.遍历key --》map[key]
         */
        keys := make([] int,0,len(map1))  //定义一个keys容量是map1的长度
        fmt.Println("one_keys ",keys)
    
        for k,_ := range map1{
            keys = append(keys,k)
        }
        fmt.Println("for_keys: ",keys)
    
    //  排序
        sort.Ints(keys)
        fmt.Println(keys)
    //  遍历key
        for _,key := range keys{
            fmt.Println(key,map1[key])
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:Go语言之集合(Map)

          本文链接:https://www.haomeiwen.com/subject/ynptzhtx.html