【入门】Go语言Map集合详解

发布时间 2023-03-30 17:24:16作者: 躺平摆烂

一、Map集合介绍

1.1 什么是Map集合?

  • map集合是一种无序的键值对的集合
  • map是通过key来快速检索数据,key类似于索引,指向数据的值
  • 在获取 Map 的值时,如果键不存在,返回该类型的零值,例如 int 类型的零值是 0,string 类型的零值是 ""
  • Map 是引用类型,如果将一个 Map 传递给一个函数或赋值给另一个变量,它们都指向同一个底层数据结构,因此对 Map 的修改会影响到所有引用它的变量

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

1.2 Map集合语法

mapVariable := make(map[KeyType]ValueType, initialCapacity)
  • KeyType 是键的类型
  • ValueType 是值的类型
  • initialCapacity 是可选的参数,用于指定 Map 的初始容量

二、Map基本操作

2.1 定义Map

package main

import "fmt"

func main() {
  // 定义一个空Map
	siteMap := make(map[string]string)
	fmt.Println(siteMap)
}

或者可以使用下面方法定义并初始化:

package main

import "fmt"

func main() {

	siteMap := map[string]int{
		"zhangsan": 1,
		"lisi":     2,
		"wangwu":   3,
	}
	fmt.Println(siteMap)
}

2.2 获取Map

package main

import "fmt"

func main() {

	siteMap := map[string]int{
		"zhangsan": 1666,
		"lisi":     2666,
		"wangwu":   3,
	}

	v1 := siteMap["zhangsan"] //将zhangsan键的值付给v1变量
	v2, ok := siteMap["lisi"] //将lisi键值付给v1,ok两个变量
	fmt.Println(v1)
	fmt.Println(v2, ok)
}

代码输出内容:

1666
2666 true

2.3 修改Map元素

package main

import "fmt"

func main() {

	siteMap := map[string]int{
		"zhangsan": 1666,
		"lisi":     2666,
		"wangwu":   3,
	}
	siteMap["lisi"] = 666666 // 修改元素
	fmt.Println(siteMap["lisi"])
}

代码输出内容:

666666

2.4 删除Map元素

package main

import "fmt"

func main() {

	siteMap := map[string]int{
		"zhangsan": 1666,
		"lisi":     2666,
		"wangwu":   3,
	}
	delete(siteMap, "zhangsan") // 删除元素

	fmt.Println(siteMap)
}

代码输出内容:

map[lisi:2666 wangwu:3]

2.5 遍历Map

package main

import "fmt"

func main() {

	siteMap := map[string]int{
		"zhangsan": 1666,
		"lisi":     2666,
		"wangwu":   3,
	}
	for i, v := range siteMap {
		fmt.Printf("键:%v\t\t值:%v\n", i, v)
	}
}

代码输出内容:

键:zhangsan			值:1666
键:lisi			值:2666
键:wangwu			值:3