美文网首页程序员go学习
Go语言:map使用笔记

Go语言:map使用笔记

作者: linjinhe | 来源:发表于2017-09-03 21:11 被阅读94次

    业余时间,尝试写一点Go语言的代码,发现细节问题挺多的,备忘一下。

    Go 的 map 是 hash map;
    C++ 的 map 是 tree (主流实现是红黑树);
    C++ 的 hash map 是unordered_map。

    定义和初始化一个map

    var m map[string]int
    if m == nil {
        fmt.Println("Map m is nil.")
    }
    
    a := m["k0"]
    fmt.Println(a)        // 输出 0
    
    m["k0"] = 123      // panic
    

    map是一种引用类型,所以上面定义的 m 的值为 nil。
    对于读操作,nil map 的行为和 empty map 的行为一样,返回“零值”。
    对于写操作,nil map 会 panic。

    m := make(map[string]int)
    if m != nil {
        fmt.Println("Map m is not nil.")
    }
    

    可以使用 make 函数对一个 map 进行初始化:m 现在是一个 empty map。

    m := map[string]int{}
    if m1 != nil {
        fmt.Println("Map m1 is not nil.")
    }
    

    另一种定义并初始化一个 empty map 的方式。

        m := map[string]int{
            "k1": 11,
            "k2": 22,
        }
    

    定义一个 map,并插入两个值。

    map的基本操作

    i := m["k1"]
    fmt.Println(i)
    

    key 存在,返回对应的 value;key 不存在,则返回“零值”。

    i, ok := m["k1"]
    

    key 存在,则 ok 为 true,否则为 false。

    k_vs := make(map[string][]string)        // k_vs means key-values
    k_vs[kv.Key] = append(k_vs[kv.Key], kv.Value)
    

    不需要用多余的代码检查某个key是否存在——当 key 不存在时,k_vs[kv.Key] 返回一个 nil slices,append 一个 nil slices 会自动创建一个 slices。

    delete(m, "k1")
    

    key 存在,则删除;key 不存在,则不产生任何作用。

    len(m)
    

    返回 map 的长度。

    for k, v := range m {
        fmt.Println("Key:", k, "Value:", v)
    }
    

    遍历一个 map,遍历的顺序是不确定的。

    相关文章

      网友评论

        本文标题:Go语言:map使用笔记

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