Go 语言Map(集合)

简介: Go 语言Map(集合)

Map 是一种无序的键值对的集合。

Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,遍历 Map 时返回的键值对的顺序是不确定的。

在获取 Map 的值时,如果键不存在,返回该类型的零值,例如 int 类型的零值是 0,string 类型的零值是 ""。

Map 是引用类型,如果将一个 Map 传递给一个函数或赋值给另一个变量,它们都指向同一个底层数据结构,因此对 Map 的修改会影响到所有引用它的变量。

定义 Map

可以使用内建函数 make 或使用 map 关键字来定义 Map:

/* 使用 make 函数 */

map_variable := make(map[KeyType]ValueType, initialCapacity)

其中 KeyType 是键的类型,ValueType 是值的类型,initialCapacity 是可选的参数,用于指定 Map 的初始容量。Map 的容量是指 Map 中可以保存的键值对的数量,当 Map 中的键值对数量达到容量时,Map 会自动扩容。如果不指定 initialCapacity,Go 语言会根据实际情况选择一个合适的值。

实例

// 创建一个空的 Map

m := make(map[string]int)


// 创建一个初始容量为 10 的 Map

m := make(map[string]int, 10)

也可以使用字面量创建 Map:

// 使用字面量创建 Map

m := map[string]int{

   "apple": 1,

   "banana": 2,

   "orange": 3,

}

获取元素:

// 获取键值对

v1 := m["apple"]

v2, ok := m["pear"]  // 如果键不存在,ok 的值为 false,v2 的值为该类型的零值

修改元素:

// 修改键值对

m["apple"] = 5

获取 Map 的长度:

// 获取 Map 的长度

len := len(m)

遍历 Map:

// 遍历 Map

for k, v := range m {

   fmt.Printf("key=%s, value=%d\n", k, v)

}

删除元素:

// 删除键值对

delete(m, "banana")

实例

下面实例演示了创建和使用map:

实例

package main


import "fmt"


func main() {

   var siteMap map[string]string /*创建集合 */

   siteMap = make(map[string]string)


   /* map 插入 key - value 对,各个国家对应的首都 */

   siteMap [ "Google" ] = "谷歌"

   siteMap [ "Runoob" ] = "菜鸟教程"

   siteMap [ "Baidu" ] = "百度"

   siteMap [ "Wiki" ] = "维基百科"


   /*使用键输出地图值 */

   for site := range siteMap {

       fmt.Println(site, "首都是", siteMap [site])

   }


   /*查看元素在集合中是否存在 */

   name, ok := siteMap [ "Facebook" ] /*如果确定是真实的,则存在,否则不存在 */

   /*fmt.Println(capital) */

   /*fmt.Println(ok) */

   if (ok) {

       fmt.Println("Facebook 的 站点是", name)

   } else {

       fmt.Println("Facebook 站点不存在")

   }

}

以上实例运行结果为:

Wiki 首都是 维基百科

Google 首都是 谷歌

Runoob 首都是 菜鸟教程

Baidu 首都是 百度

Facebook 站点不存在


delete() 函数

delete() 函数用于删除集合的元素, 参数为 map 和其对应的 key。实例如下:

实例

package main


import "fmt"


func main() {

       /* 创建map */

       countryCapitalMap := map[string]string{"France": "Paris", "Italy": "Rome", "Japan": "Tokyo", "India": "New delhi"}


       fmt.Println("原始地图")


       /* 打印地图 */

       for country := range countryCapitalMap {

               fmt.Println(country, "首都是", countryCapitalMap [ country ])

       }


       /*删除元素*/ delete(countryCapitalMap, "France")

       fmt.Println("法国条目被删除")


       fmt.Println("删除元素后地图")


       /*打印地图*/

       for country := range countryCapitalMap {

               fmt.Println(country, "首都是", countryCapitalMap [ country ])

       }

}

以上实例运行结果为:

原始地图

India 首都是 New delhi

France 首都是 Paris

Italy 首都是 Rome

Japan 首都是 Tokyo

法国条目被删除

删除元素后地图

Italy 首都是 Rome

Japan 首都是 Tokyo

India 首都是 New delhi

目录
相关文章
|
5天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
33 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
25天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
37 7
|
25天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
25天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
99 71
|
24天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
103 67
|
27天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
94 62
|
25天前
|
存储 Go
go语言中映射
go语言中映射
36 11
|
27天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
33 12
|
26天前
|
Go 索引
go语言使用索引遍历
go语言使用索引遍历
30 9
|
26天前
|
Go 索引
go语言使用range关键字
go语言使用range关键字
29 7