Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Golang Map类型

Golang Map类型的使用(增删查改)

作者:2021dragon

在Go中,map是哈希表的引用,是一种key-value数据结构,本文主要介绍了Golang Map类型的使用,具有一定的参考价值,感兴趣的可以了解一下

Map介绍

Map介绍

map的示意图如下:

在这里插入图片描述

map中仅包含一个指向底层哈希表的指针,属于引用类型,当map类型变量进行赋值或传参时,本质就是将map中指向哈希表的指针的值进行拷贝,因此最终两个map变量底层指向的是同一个哈希表,其中一个变量对哈希表修改会影响到另一个map变量。如下:

在这里插入图片描述

Map的定义方式

方式一:make map

在定义map时,可以通过make创建指定初始容量的map。如下:

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	// 方式一:make map
	var m = make(map[string]string, 10)
	fmt.Printf("m = %v\n", m)                     // m = map[]
	fmt.Printf("m len = %v\n", len(m))            // m len = 0
	fmt.Printf("m size = %d\n", unsafe.Sizeof(m)) // m size = 8
}

说明一下:

方式二:指定具体的键值对

在定义map时,也可以直接指定具体的键值对。如下:

package main

import (
	"fmt"
)

func main() {
	// 方式二:指定具体的键值对
	var m = map[string]string{
		"四川省": "川",
		"陕西省": "陕",
		"广东省": "粤",
	}
	fmt.Printf("m = %v\n", m)          // m = map[四川省:川 广东省:粤 陕西省:陕]
	fmt.Printf("m len = %d\n", len(m)) // m len = 3
}

说明一下:

Map的增删查改

新增和修改Map元素

新增和修改Map元素

Go中通过map名[key] = value的方式在map中新增和修改键值对。如下:

package main

import "fmt"

func main() {
	// 新增和修改Map元素
	var m = map[string]string{
		"四川省": "川",
		"陕西省": "陕",
		"广东省": "粤",
	}
	m["浙江省"] = "浙"                     // 新增
	m["四川省"] = "川~"                    // 修改
	fmt.Printf("m = %v\n", m)          // m = map[四川省:川~ 广东省:粤 浙江省:浙 陕西省:陕]
	fmt.Printf("m len = %d\n", len(m)) // m len = 4
}

说明一下:

查找Map元素

查找Map元素

Go中通过map名[key]的方式查找map中的元素。如下:

package main

import "fmt"

func main() {
	// 查找Map元素
	var m = map[string]string{
		"四川省": "川",
		"陕西省": "陕",
		"广东省": "粤",
	}
	var key = "四川省"
	value, ok := m[key] // 查找
	if !ok {
		fmt.Printf("没有key为%s的键值对\n", key)
	} else {
		fmt.Printf("%s的简称为%s\n", key, value) // 四川省的简称为川
	}
}

说明一下:

删除Map元素

删除Map元素

Go中通过delete函数删除map中指定key值的键值对。如下:

package main

import "fmt"

func main() {
	// 删除Map元素
	var m = map[string]string{
		"四川省": "川",
		"陕西省": "陕",
		"广东省": "粤",
	}
	delete(m, "广东省") // 删除
	fmt.Printf("m = %v\n", m) // m = map[四川省:川 陕西省:陕]
}

说明一下:

遍历Map元素

遍历Map元素

Go中通过for range循环的方式对map元素的遍历。如下:

package main

import "fmt"

func main() {
	// 遍历Map元素
	var m = map[string]string{
		"四川省": "川",
		"陕西省": "陕",
		"广东省": "粤",
	}
	// 遍历map元素
	for key, value := range m {
		fmt.Printf("<key:%s, value:%s>\n", key, value)
	}
}

说明一下:

Map元素排序

Map元素排序

map中的元素是无序的,想要按照key值遍历键值对,可以采用以下方式:

使用案例如下:

package main

import (
	"fmt"
	"sort"
)

func main() {
	// map元素排序
	var m = map[int]string{
		1: "周一",
		7: "周日",
		3: "周三",
		2: "周二",
		5: "周五",
		4: "周四",
		6: "周六",
	}
	// 1、获取map中所有的key
	var keys []int
	for key, _ := range m {
		keys = append(keys, key)
	}
	// 2、对所有的key进行排序
	sort.Ints(keys)
	// 3、遍历有序的key,根据key访问其value
	for _, key := range keys {
		fmt.Printf("<key:%d, value:%s>\n", key, m[key])
	}
}

运行程序后可以看到,输出的键值对信息是按key值排序的。如下:

在这里插入图片描述

说明一下:

Map切片

Map切片

如果一个切片中存储元素的数据类型是map,那么我们称之为map切片。如下:

package main

import "fmt"

func AddStudent(students []map[string]string,
	name string, gender string, class string) []map[string]string {
	var student = map[string]string{
		"name":   name,
		"gender": gender,
		"class":  class,
	}
	students = append(students, student)
	return students
}

func main() {
	// map切片
	var students []map[string]string
	students = AddStudent(students, "Alice", "female", "class 2")
	students = AddStudent(students, "Bob", "male", "class 1")
	for i := 0; i < len(students); i++ {
		fmt.Printf("第%d个学生的信息如下:\n", i+1)
		for key, value := range students[i] {
			fmt.Printf("\t%s: %s\n", key, value)
		}
	}
}

上述代码中定义了一个map切片,切片中的每一个map存储着一个学生的信息,我们通过AddStudent函数向map切片中添加了两个学生的信息,并通过遍历切片中的map输出了学生的信息。运行结果如下:

在这里插入图片描述

说明一下:

到此这篇关于Golang Map类型的使用(增删查改)的文章就介绍到这了,更多相关Golang Map类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文