Golang:字典

作者: 与蟒唯舞 | 来源:发表于2017-12-22 11:49 被阅读37次
    创建 map

    可以通过将键和值的类型传递给内置函数 make 来创建一个 map。语法为:make(map[type of key]type of value)

    personSalary := make(map[string]int)  
    

    上面的代码创建了一个名为 personSalary 的 map。其中键的类型为 string,值的类型为 int

    map 的零值为 nil。试图给一个 nil map 添加元素会导致运行时错误。因此 map 必须通过 make 来初始化。

    package main
    
    import (  
        "fmt"
    )
    
    func main() {  
        var personSalary map[string]int
        if personSalary == nil {
            fmt.Println("map is nil. Going to make one.")
            personSalary = make(map[string]int)
        }
    }
    

    上面的程序中,personSalary 为 nil,因此使用 make 来初始化它。

    访问 map 中的元素

    如果访问的键不存在,map 会返回值类型的零值。

    package main
    
    import (  
        "fmt"
    )
    
    func main() {  
        personSalary := map[string]int{
            "steve": 12000,
            "jamie": 15000,
        }
        personSalary["mike"] = 9000
        employee := "jamie"
        fmt.Println("Salary of", employee, "is", personSalary[employee])
        fmt.Println("Salary of joe is", personSalary["joe"])
    }
    

    上面的程序输出为:

    Salary of jamie is 15000  
    Salary of joe is 0  
    

    如何检测一个键是否存在于一个 map 中呢?可以使用下面的语法:

    value, ok := map[key]  
    

    如果 ok 是 true,则键存在,value 被赋值为对应的值。如果 ok 为 false,则表示键不存在,value 被赋值为对应类型的零值。

    map 是引用类型

    与切片一样,map 是引用类型。当一个 map 赋值给一个新的变量,它们都指向同一个内部数据结构。因此改变其中一个也会影响到另一个。

    比较 map

    map 不能通过 == 操作符比较是否相等。== 操作符只能用来检测 map 是否为 nil

    package main
    
    func main() {  
        map1 := map[string]int{
            "one": 1,
            "two": 2,
        }
    
        map2 := map1
    
        if map1 == map2 {
        }
    }
    

    上面的程序将会报错:invalid operation: map1 == map2 (map can only be compared to nil)

    相关文章

      网友评论

        本文标题:Golang:字典

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