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