Go语言集合的用法
Go 语言的集合称为映射(map),它是一种无序的键值对(key-value)的集合,集合是通过键(key)来快速检索值(value)的,键(key)类似于索引,它指向值(value)的数据。
Go 语言的集合语法定义如下:
定义集合一共划分为 3 种方式:只定义、定义并赋值、使用 make() 函数定义,它们的使用方式如下:
在一个集合中,所有键值对(key-value)在定义的时候已设置了相应数据类型,换句话说,一个集合的所有键(key)或所有值(value)都是同一种数据类型,如果键值对(key-value)的数据类型不相符,程序将提示异常信息,示例如下:
如果删除集合中某个键值对(key-value),可以使用内置函数方法 delete() 实现,内置函数方法 delete() 只适用于集合,它是删除集合元素的特有函数,示例如下:
集合的定义与使用
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 定义的,语法说明如下:
- name 用于设置集合变量的名称;
- keytype 用于设置键(key)的数据类型;
- valuetype 用于设置值(value)的数据类型。
定义集合一共划分为 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]