GO语言map知识点

本文详细探讨了Go语言中Map的创建、取值、检查、删除等操作,以及通过`range`关键字进行遍历的方式。当尝试访问不存在的key时,将返回该类型的默认值。同时,文章指出Map的遍历不保证顺序,若需要顺序遍历,需先对key进行排序。此外,文章还强调了Map中key的要求,包括可比较性和适用类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import "fmt"

func main() {
	m := map[int]string{
		1: "小红",
		2: "小明",
		3: "小刚",
	}

	m2 := make(map[int]string) //m2 == empty map
	var m3 map[int]string      //m3 == nil
	fmt.Println(m)
	fmt.Println(m2)
	fmt.Println(m3)

	fmt.Println("-------------")
	for k, v := range m {
		fmt.Println(k, v)
	}
}


上述程序包含着几种map的构造方法和打印map的方法
其中,nil和empty map可以混用
运行结果:

在这里插入图片描述
问题来了,程序多运行几遍,结果会发生变化:
在这里插入图片描述
在解决问题前先来复习一下map的知识点:

package main

import "fmt"

func main() {
	m := map[int]string{
		1: "小红",
		2: "小明",
		3: "小刚",
	}
	name := m[1]
	fmt.Println(name)
	name2 := m[4]
	fmt.Println(name2)
}

有关map的取值
name := m[1],毫无疑问,取的是小红,可是在map中并没有出现4这个key,name2 := m[4]会打印什么呢?
在这里插入图片描述
可以看到,打印了一个空字符串
再完善一下代码

package main

import "fmt"

func main() {
	m := map[int]string{
		1: "小红",
		2: "小明",
		3: "小刚",
	}
	name, ok := m[1]
	fmt.Println(name, ok)
	name2, ok := m[4]
	fmt.Println(name2, ok)
}

结果:
在这里插入图片描述
即,可以得到,当key不存在的时候,value取到的是该类型值的初始值

再来看看元素的删除:

package main

import "fmt"

func main() {
	m := map[int]string{
		1: "小红",
		2: "小明",
		3: "小刚",
	}

	/*	m2 := make(map[int]string) //m2 == empty map
		var m3 map[int]string      //m3 == nil
		fmt.Println(m)
		fmt.Println(m2)
		fmt.Println(m3)

		fmt.Println("-------------")
		for k, v := range m {
			fmt.Println(k, v)
		}

		fmt.Println("------")*/
	/*name, ok := m[1]
	fmt.Println(name, ok)
	name2, ok := m[4]
	fmt.Println(name2, ok)*/

	fmt.Println("del")
	name, ok := m[1]
	fmt.Println(name, ok)
	delete(m, 1)
	fmt.Println(m)
}

在这里插入图片描述
再回到我们开始的问题,map的遍历采用的是range,然后键值对,但这种遍历不保证顺序,如果要保证顺序,要以切片的方式对key进行排序。

补充个知识点:
关于map中的key:

  • map使用哈希表,必须可以比较相等
  • 出了slice,map,function中的内建类型,其他都可以作为key
  • 自定义的结构也可以作为key
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值