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

目录
相关文章
|
4天前
|
Go
Go 语言循环语句
在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。
12 1
|
3天前
|
Go 开发者
探索Go语言的并发之美
在Go语言的世界里,"并发"不仅仅是一个特性,它是一种哲学。本文将带你领略Go语言中goroutine和channel的魔力,揭示如何通过Go的并发机制来构建高效、可靠的系统。我们将通过一个简单的示例,展示如何利用Go的并发特性来解决实际问题,让你的程序像Go一样,轻盈而强大。
|
4天前
|
JSON Go API
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
|
4天前
|
Go
go语言创建字典
go语言创建字典
|
5天前
|
安全 Go 数据处理
探索Go语言的并发之美:Goroutines与Channels
在Go语言的世界里,"并发"不仅仅是一个概念,它是一种生活的方式。本文将带你领略Go语言中Goroutines和Channels的魔力,它们是如何让并发编程变得既简单又高效。我们将通过一个简单的示例,展示如何使用这些工具来构建一个高性能的网络服务。
|
5天前
|
关系型数据库 Go 数据处理
高效数据迁移:使用Go语言优化ETL流程
在本文中,我们将探索Go语言在处理大规模数据迁移任务中的独特优势,以及如何通过Go语言的并发特性来优化数据提取、转换和加载(ETL)流程。不同于其他摘要,本文不仅展示了Go语言在ETL过程中的应用,还提供了实用的代码示例和性能对比分析。
|
6天前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
5天前
|
NoSQL Go API
go语言操作Redis
go语言操作Redis
|
5天前
|
Unix Go
go语言获取当前时间戳
go语言获取当前时间戳
|
5天前
|
Go
go语言李mapstructure啥意思
go语言李mapstructure啥意思