08-go map

作者: 一如既往wfqwfq | 来源:发表于2020-05-09 00:12 被阅读0次

    1、什么是map

    map是go中的关系映射容器,其内部是基于散列表(hash)实现的。map是一种无序的数据结构,在go中,map是引用类型,需要初始化后才能使用。

    2、map的定义

    map的定义语法:map[keyType]valueType

    • keyType:map中key的数据类型
    • vulueType:map中value的数据类型

    3、map的初始化

    map是引用类型,它的默认值为nil。make()函数可以用来初始化map。它的语法为:make(map[keyType]valueType, [cap])

    • cap:map的容量,不是必须的参数

    4、map的基本使用

    func main() {
        m := make(map[string]int)
        m["张三"] = 100
        m["李四"] = 200
        m["王五"] = 300
        // 打印map
        fmt.Println(m)  // map[张三:100 李四:200 王五:300]
        // 取map的某个值
        i := m["王五"]
        fmt.Println(i)  // 300
    }
    

    5、判断键值对是否存在

    在实现判断键值对是否存在时,先来看一个demo。

    func main() {
        m := make(map[string]int)
        m["张三"] = 100
        i := m["李四"]
        fmt.Println(i) // 0
        m1 := make(map[string]string)
        m1["张三"] = "123"
        s := m1["李四"]
        fmt.Println(s)  // 打印空串
    }
    

    从上面的demo可以得出这样的结论:如果map不存在某个键,而程序又取获取这个键的值时,得到得值类型得默认值。这样在实际程序开发中,很有可能造成一些逻辑上得错误。
    go语言提供了一种判断map中键是否存在得特殊写法:val, isPresent = map[key]
    其中isPresent是一个bool型的值,它表示这个键是否存在

    func main() {
        m := make(map[string]int)
        m["张三"] = 100
        m["李四"] = 200
        value1, isPresent1 := m["李四"]
        if isPresent1 {
            fmt.Println(isPresent1) // true
            fmt.Println(value1) // 200
        } else {
            fmt.Println("该键不存在")
        }
    
        value2, isPresent2 := m["王五"]
        if isPresent2 {
            fmt.Println(isPresent2) 
            fmt.Println(value2)
        } else {
            fmt.Println(isPresent2) // false
            fmt.Println("该键不存在")
        }
    }
    

    相关文章

      网友评论

          本文标题:08-go map

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