美文网首页
Go语言学习之——map

Go语言学习之——map

作者: 星空_ad64 | 来源:发表于2018-04-10 20:39 被阅读0次

    1、定义:map[key的类型]value的类型

    m1 := map[string]int{
        "a": 99,
        "b": 40,
        "c": 33,
        "d": 100,
    }
    m2 := make(map[int]int) // empty map
    var m3 map[string]string // nil
    ​
    fmt.Println(m1, m2, m3) // output: map[a:99 b:40 c:33 d:100] map[] map[]
    

    key的类型要求:
    map使用哈希表,必须可以比较相等
    除了slice,map,function的内建类型都可以作为key
    自己定义的Struct类型,如不包含以上字段,也可作为key


    2、遍历

    m1 := map[string]int{
        "a": 99,
        "b": 40,
        "c": 33,
        "d": 100,
    }
    ​
    for k,v := range m1 {
        fmt.Println(k, v)
    }
    // k := range m1 只要key
    // _,v := range m1 只要value
    

    输出为:
    b 40
    c 33
    d 100
    a 99
    每次输出顺序可能不能,且与开始定义的顺序也可能不同,因为存储时是无序存储的


    3、判断某值是否存在于map中

        m1 := map[string]int{
            "a": 99,
            "b": 40,
            "c": 33,
            "d": 100,
        }
    ​
        score_a := m1["a"]
        fmt.Println(score_a) // output:99
        score_f := m1["f"] // f在m1中并不存在,但也可以进行取值,zero value
        fmt.Println(score_f) // output:0,如果value类型是string,输出为空串
    score_a, ok := m1["a"]
    fmt.Println(score_a, ok) // output:99 true
    score_f, ok := m1["f"]
    fmt.Println(score_f, ok) // output:0 false
    

    所以使用时可以使用一下写法:

    if score_f, ok := m1["f"]; ok{
        fmt.Println(score_f, ok)
    }else{
        fmt.Println("This key does not exist!")
    } // output:This key does not exist!
    

    4、删除元素

        m1 := map[string]int{
            "a": 99,
            "b": 40,
            "c": 33,
            "d": 100,
        }
    ​
        name, ok := m1["c"]
        fmt.Println( name, ok ) // output:33 true
    delete( m1, "c") // delete(map名,key)
        name, ok = m1["c"] //因为之前已经定义过,所以不能再写:=
        fmt.Println( name, ok ) // output:0 false
    

    5、长度

    len(m1)
    

    相关文章

      网友评论

          本文标题:Go语言学习之——map

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