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

目录
相关文章
|
11月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
564 2
|
11月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
488 2
|
12月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
348 4
|
安全 Java 数据库连接
让我们讲解一下 Map 集合遍历的方式
我是小假 期待与你的下一次相遇 ~
460 43
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
749 1
|
存储 人工智能 安全
深入理解 go sync.Map - 基本原理
本文介绍了 Go 语言中 `map` 在并发使用时的常见问题及其解决方案,重点对比了 `sync.Mutex`、`sync.RWMutex` 和 `sync.Map` 的性能差异及适用场景。文章指出,普通 `map` 不支持并发读写,容易引发错误;而 `sync.Map` 通过原子操作和优化设计,在某些场景下能显著提升性能。同时详细讲解了 `sync.Map` 的基本用法及其适合的应用环境,如读多写少或不同 goroutine 操作不同键的场景。
632 1
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
698 0
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
529 0
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
566 0
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
1621 0

热门文章

最新文章