Go的学习路程:字典|Go 主题月

139 阅读2分钟

Go 语言中,字典类型的官方称谓是 Map, 它是哈希表(Hash Table)的一个实现。跟 Java 中的 HashMap 非常的相似。

字典(哈希表)是一种使用频率极高的数据结构。作为无序键值对集合,字典要求 key 必须是支持相等运算符(==、!=)的数据类型,比如数字、字符串、指针、数组、结构体以及对应接口类型。

如果一个字典类型的键的类型为K,且元素的类型为T,那么用于表示这个字典类型的类型字面量:map[K]T

字典是引用类型,使用 make 函数或初始化表达语句来创建。

make 函数创建


package main
import "fmt"

func main() {
    m := make(map[string]int)
    m["onlineCount"] = 12
    m["offlineCount"] = 10
    fmt.Println(m) // map[offlineCount:10 onlineCount:12]
}

如上代码通过 make 函数创建了一个 key 为 string 类型,value 为 int 类型的字典。通过 m["key"] 的方式可以对字典访问或赋值。

初始化语句创建

package main
import "fmt"

func main() {
    m2 := map[string]struct {
        name string
        age int
    }{
        "张": {"张三", 18},
        "李": {"李四", 25},
    }
    fmt.Println(m2) // map[张:{张三 18} 李:{李四 25}]
}

如上代码通过初始化语句的方式创建了一个 key 为 string 类型,value 为匿名结构体类型的字典。

增、删、改

字典创建之后可以对字典内容进行修改。

package main
import "fmt"

func main() {
    phoneCountMap := make(map[string]int)
    fmt.Println(phoneCountMap) // map[]

    // 增
    phoneCountMap["nokia n95"] = 100
    phoneCountMap["nokia n97"] = 22
    phoneCountMap["iphone 12 pro"] = 88
    fmt.Println(phoneCountMap) // map[iphone 12 pro:88 nokia n95:100 nokia n97:22]

    // 改
    phoneCountMap["nokia n95"] = 38
    fmt.Println(phoneCountMap) // map[iphone 12 pro:88 nokia n95:38 nokia n97:22]

    // 删
    delete(phoneCountMap, "nokia n97")
    fmt.Println(phoneCountMap) // map[iphone 12 pro:88 nokia n95:38]
}

对于删除字典中的键值对可以使用 delete(map, key) 函数。map 表示要删除的字典,key 表示要删除的键。