首页 > 编程笔记

Go语言集合的用法

Go 语言的集合称为映射(map),它是一种无序的键值对(key-value)的集合,集合是通过键(key)来快速检索值(value)的,键(key)类似于索引,它指向值(value)的数据。

集合的定义与使用

Go 语言的集合在其他编程语言中也称为字典(Python)、hash 或 HashTable 等,它们在数据结构上都是相同的,只不过名称不一样而已。

Go 语言的集合语法定义如下:
// 定义方式1,只定义
var name map[keytype]valuetype
name = map[keytype]valuetype{}
// 简写
var name = map[keytype]valuetype{}

// 定义方式2,定义并赋值
var name = map[keytype]valuetype{key: value}

// 定义方式3,使用make()函数定义
var name map[keytype]valuetype
name = make(map[keytype]valuetype)
// 简写
name := make(map[keytype]valuetype)
集合是使用关键字 map 定义的,语法说明如下:
定义集合一共划分为 3 种方式:只定义、定义并赋值、使用 make() 函数定义,它们的使用方式如下:
package main

import (
    "fmt"
)

func main() {
    // 只定义
    var m1 = map[string]string{}
    m1["name"] = "Tom"
    fmt.Printf("集合m1:%v\n", m1)
    // 定义并赋值
    var m2 = map[string]string{"name": "Lily"}
    fmt.Printf("集合m2:%v\n", m2)
    // 使用make()函数定义
    m3 := make(map[string]string)
    m3["name"] = "Tim"
    fmt.Printf("集合m3:%v\n", m3)
}
运行上述代码,运行结果为:

集合m1:map[name:Tom] 
集合m2:map[name:Lily] 
集合m3:map[name:Tim]


在一个集合中,所有键值对(key-value)在定义的时候已设置了相应数据类型,换句话说,一个集合的所有键(key)或所有值(value)都是同一种数据类型,如果键值对(key-value)的数据类型不相符,程序将提示异常信息,示例如下:
package main

import (
    "fmt"
)

func main() {
    var m1 = map[string]string{}
    m1["name"] = 10
    fmt.Printf("集合m1:%v\n", m1)
}
运行上述代码,程序将提示数据类型不匹配:

cannot use 10(type untyped int)as type string in assignment

删除集合元素

当集合定义之后,只要通过 m[key]=value 方式就能实现集合元素的新增或修改,如果键(key)不在集合里面,就对该集合新增键值对;如果键(key)已在集合中,则对原有的键(key)进行修改。

如果删除集合中某个键值对(key-value),可以使用内置函数方法 delete() 实现,内置函数方法 delete() 只适用于集合,它是删除集合元素的特有函数,示例如下:
package main

import "fmt"

func main() {
    var m1 = map[string]string{}
    m1["name"] = "Tom"
    m1["age"] = "20"
    m1["addr"] = "GZ"
    fmt.Printf("集合m1的数据:%v\n", m1)
    // 删除key=addr的数据
    delete(m1, "addr")
    fmt.Printf("集合m1的数据:%v\n", m1)
}
运行上述代码,运行结果为:

集合m1的数据:map[addr:GZ age:20 name:Tom] 
集合m1的数据:map[age:20 name:Tom]

推荐阅读