Go语言基础(十一)Map

Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

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

定义map

func main() {
	m1 := map[string]string{
		"student1":"zhangsan",
		"student2":"lisi",
		"student3":"wangwu",
	}

	m2 := make(map[string]int) // m3 = empty

	var m3 map[string]int	// m3 = nil

	fmt.Print(m1,m2,m3)
}

运行结果如下:

遍历map

使用range对map进行遍历

func main() {
	m1 := map[string]string{
		"student1":"zhangsan",
		"student2":"lisi",
		"student3":"wangwu",
	}
	
	fmt.Println("遍历map。。。")
	for k,v := range m1{
		fmt.Println(k,v)
	}
}

运行结果如下:

map的输出和map里面的内容顺序没有关系

map的操作

获取值

func main() {
	m1 := map[string]string{
		"student1":"zhangsan",
		"student2":"lisi",
		"student3":"wangwu",
	}

	fmt.Println("获取map值。。。")
	student2 := m1["student2"]
	fmt.Println(student2)
}

运行结果如下:

如果student2拼写错误会输出什么值?

func main() {
	m1 := map[string]string{
		"student1":"zhangsan",
		"student2":"lisi",
		"student3":"wangwu",
	}

	fmt.Println("获取map值。。。")
	student2 := m1["stduent2"]
	fmt.Println(student2)
	fmt.Println("...........")
}

运行结果如下:

输出的绘制一行空串

判断值是否存在

如何判断map里面是否有这个key?

func main() {
	m1 := map[string]string{
		"student1":"zhangsan",
		"student2":"lisi",
		"student3":"wangwu",
	}

	fmt.Println("获取map值。。。")
	stu1,ok := m1["student2"]
	fmt.Println(stu1,ok)
	stu2,ok := m1["stduent2"]
	fmt.Println(stu2,ok)
}

运行结果如下:

根据上面的运行,我们可以修改代码如下:

func main() {
	m1 := map[string]string{
		"student1":"zhangsan",
		"student2":"lisi",
		"student3":"wangwu",
	}

	fmt.Println("获取map值。。。")
	stu1,ok := m1["student2"]
	fmt.Println(stu1,ok)
	if stu2,ok := m1["stduent2"];ok{
		fmt.Println(stu2,ok)
	}else {
		fmt.Println("Key does not exist")
	}

}

运行结果如下:

删除值

func main() {
	m1 := map[string]string{
		"student1":"zhangsan",
		"student2":"lisi",
		"student3":"wangwu",
	}

	fmt.Println("删除值")
	stu1,ok := m1["student2"]
	fmt.Println(stu1,ok)

	delete(m1,"student2")
	stu2,ok := m1["student2"]
	fmt.Println(stu2,ok)


}

运行结果如下:

Map操作总结

  • 创建:make(map[string]int)
  • 获取元素:m[key]
  • key不存在时,获取Value类型的初始值
  • 用value,ok := m[key]来判断是否存在key

Map的遍历

  • 使用range遍历key,或者遍历key,value
  • 不保证遍历的顺序,如果需要顺序,需要手动对key进行排序
  • 使用len获取元素的个数

Map的Kay

  • map使用哈希表,必须可以比较相等
  • 除了slice、map、function的内建类型都可以作为key
  • Struct类型不包含上述字段,也可以作为key

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值