Go语言学习之入门篇(九)

目录

1.map的声明方式

2.map的一些基本操作

2.1 遍历

2.3 map的删除键值对的方式

2.4 map的修改键值对的方式


1.map的声明方式

Go语言的Map有三种声明方式,其声明方式和slice相似,第一种声明方式,是先声明再使用make开辟空间:

package main

import "fmt"

func main()  {
	// 声明一个map,其键和值均为string类型,[key类型]value类型,注意仅仅是声明是没有开辟内存空间的,其值为nil(空)
	var myMap1 map[string]string;
	if (myMap1 == nil) {
		fmt.Println("myMap1 is empty")
	}
	// 给myMap1开辟空间,make的第二个参数为开辟空间的大小,并添加一些值
	myMap1 = make(map[string]string, 10)

	myMap1["one"] = "apple"
	myMap1["two"] = "banana"
	myMap1["three"] = "orange"
	// 打印myMap1
	fmt.Println(myMap1)
}

运行结果:

myMap1 is empty
map[one:apple three:orange two:banana]
可以看到,Go语言中光声明map类型是没有开辟地址空间的,需要使用make来开辟内存空间,这里同样有一个问题,就是如果添加的键值对超过预先开辟的内存空间会怎么样呢?答案是和slice切片中是一样的,会再次开辟同样容量的空间,在上面这个例子中就是如果已经有10个键值对了,那么再添加一个键值对,那么将再开辟10个空间用来存储。Go语言同样可以直接声明并开辟空间,那就是第二种声明方式,那就要用上:=了,看个例子

package main

import "fmt"

func main()  {
	// 声明一个map,其键和值均为string类型,[key类型]value类型
	myMap1 := make(map[string]string);
	if (myMap1 == nil) {
		fmt.Println("myMap1 is empty")
	}
	myMap1["one"] = "apple"
	myMap1["two"] = "banana"
	myMap1["three"] = "orange"
	// 打印myMap1
	fmt.Println(myMap1)
}

运行结果:
map[one:apple three:orange two:banana] 

可以看到,开辟了空间后,myMap1就不再是nil了,且这也是map的其中一种声明方式,当然,我们在使用make开辟空间的时候也可以省略第二个参数,则Go语言底层会开辟默认大小的空间来进行存储。(这里我直接省略了第二参数,在不能预估具体键值对数量的情况下直接使用默认就好)。我们再看看第三种声明方式,即声明并赋一些初始值。

package main

import "fmt"

func main()  {
	// 声明一个map,其键和值均为string类型,[key类型]value类型,并赋一些初始值
	myMap1 := map[string]string{"one":"apple","two":"banana","three":"orange"}

	fmt.Println(myMap1)
}

运行结果:

map[one:apple three:orange two:banana]

可以看到,可以直接对map做一些初始化。

总结,map的三种声明方式均很实用,具体使用哪种都是看具体需求,可以选择先声明,再开辟空间再赋值,也可以直接声明加赋值。

2.map的一些基本操作

2.1 遍历

map的遍历方式与slice类似,slice返回的是index,vlaue,map则返回的是key和value

package main

import "fmt"

func main()  {
	myMap1 := map[string]string{"one":"apple","two":"banana","three":"orange"}

	//遍历
	for key, value := range myMap1 {
		fmt.Println("key = ", key, "value = ", value)
	}
}

运行结果:

key =  one value =  apple
key =  two value =  banana
key =  three value =  orange

2.2 map的添加键值对的方式

package main

import "fmt"

func main()  {
	myMap1 := map[string]string{"one":"apple","two":"banana","three":"orange"}

	//添加一个键值对
	myMap1["four"] = "pear"

	//遍历
	for key, value := range myMap1 {
		fmt.Println("key = ", key, "value = ", value)
	}
}

运行结果:

key =  one value =  apple
key =  two value =  banana
key =  three value =  orange
key =  four value =  pear

2.3 map的删除键值对的方式

package main

import "fmt"

func main()  {
	myMap1 := map[string]string{"one":"apple","two":"banana","three":"orange"}

	//删除一个键值对
	delete(myMap1, "two")

	//遍历
	for key, value := range myMap1 {
		fmt.Println("key = ", key, "value = ", value)
	}
}

运行结果

key =  one value =  apple
key =  three value =  orange

2.4 map的修改键值对的方式

package main

import "fmt"

func main()  {
	myMap1 := map[string]string{"one":"apple","two":"banana","three":"orange"}

	//修改一个键值对
	myMap1["two"] = "pear"

	//遍历
	for key, value := range myMap1 {
		fmt.Println("key = ", key, "value = ", value)
	}
}

运行结果:

key =  one value =  apple
key =  two value =  pear
key =  three value =  orange

总结:map存储的顺序不一定是有序的,对于添加和修改方式是相同的,如果key存在,则是修改原来的值,若不在,则添加该键值对。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值