9个Golang中map常用示例分享
目录
- 1.基本使用
- 2.声明的同时一起初始化
- 3.判断key是否存在
- 4.遍历map
- 5.删除k-v对
- 6.map是无序的,如何让其按照指定的顺序遍历map
- 7.map作为元素存储到切片中
- 8.切片作为map的value,map的key为字符串
- 9.map作为map的value
1.基本使wwpgbMx用
packagemain import( "fmt" ) funcmain(){ stu:=make(map[string]int,2) stu["xiaoming"]=25 stu["xiaohua"]=23 fmt.Println(stu) fmt.Println(stu["xiaoming"]) fmt.Printf("typeofa:%T",stu) }
输出:
map[xiaohua:23 xiaoming:25]
25type of a: map[string]int
2.声明的同时一起初始化
packagemain import( "fmt" ) funcmain(){ stu:=map[string]int{ "xiaoming":25, "xiaohua":22, } fmt.Println(stu) fmt.Println(stu["xiaoming"]) fmt.Println(stu["xiaohua"]) }
输出:
map[xiaohua:22 xiaoming:25]
2522
3.判断key是否存在
packagemain import( "fmt" ) funcmain(){ stu:=map[string]int{ "xiaoming":25, "xiaohua":22, } v1,result1:=stu["xiaoming"] v2,result2:=stu["xiaohuang"] fmt.Println(result1,v1) fmt.Println(result2,v2) ifresult1{ fmt.Println("yes") }else{ fmt.Println("no") } ifresu开发者_Python培训lt2{ fmt.Println("yes") }else{ fmt.Println("no") } }
输出:
true 25
false 0yesno
如果key存在,则result1为true,否则反之,可见result2。
4.遍历map
packagemain import( "fmt" ) funcmain(){ stu:=map[string]int{ "xiaoming":25, "xiaohua":22, "xiaozhang":23, "xiaoshi":21, "xiaoyu":18, } fork,v:=rangestu{ fmt.Println(k,v) } }
输出:
xiaoming 25
xiaohua 22xiaozhang 23xiaoshi 21xiaoyu 18
也可以只遍历key
fork:=rangestu{ fmt.Println(k) }
5.删除k-v对
使用内置的delete函数进行删除
packagemain import( "fmt" ) funcmain(){ stu:=map[string]int{ "xiaoming":25, "xiaohua":22, "xiaozhang":23, "xiaoshi":21, "xiaoyu":18, } fmt.Println(stu) delete(stu,"xiaoshi") fmt.Println(stu) }
输出:
map[xiaohua:22 xiaoming:25 xiaoshi:21 xiaoyu:18 xiaozhang:23]
map[xiaohua:22 xiaoming:25 xiaoyu:18 xiaozhang:23]
6.map是无序的,如何让其按照指定的顺序遍历map
「无序的遍历演示」
packagemain import( "fmt" "math/rand" "time" ) funcmain(){ rand.Seed(time.Now().UnixNano()) varhostMap=make(map[string]string,10) fori:=0;i<10;i++{ key:=fmt.Sprintf("host%02d",i) value:=rand.Intn(100) ip:=fmt.Sprintf("10.1.1.%d",value) hostMap[key]=ip } fork,v:=rangehostMap{ fmt.Println(k,v) } }
输出:
host03 10.1.1.32
host00 10.1.1.0host02 10.1.1.37host05 10.1.1.97host06 10.1.1.61host07 10.1.http://www.devze.com1.62host08 10.1.1.28host09 10.1.1.40host01 10.1.1.62host04 10.1.1.70
注意到了吗?map是无序的。虽然host01-host09是有顺序的赋给了map,但遍历取值的时候就不是有序了。而且,每一次遍历的顺序都不同。
「实现有序的遍历」
packagemain import( "fmt" "math/rand" "sort" "time" ) funcmain(){ rand.Seed(time.Now().UnixNano()) varhostMap=make(map[string]string,10) fori:=0;i<10;i++{ key:=fmt.Sprintf("host%02d",i) value:=rand.Intn(100) ip:=fmt.Sprintf("10.1.1.%d",value) hostMap[key]=ip } varhostSlice=make([]string,0,200) //将hostMap中的key追加到hostSlice(切片) fork:=rangehostMap{ hostSlice=append(hostSlice,k) } //使用内置的sort函数对切片(hostSlice)进行排序(基于key进行排序,刚刚已经把key追加到了切片中) sort.Strings(hostSlice) for_,k:=rangehostSlice{ fmt.Println(k,hostMap[k]) } }
输出:
host00 10.1.1.87
host01 10.1.1.98host02 10.1.1.93host03 10.1.1.4host04 10.1.1.1host05 10.1.1.28host06 10.1.1.11host07 10.1.1.43host08 10.1.1.31host09 10.1.1.83
7.map作为元素存储到切片中
packagemain impowwPgbMxrt( "fmt" ) funcmain(){ //创建一个存储map类型元素的切片,最大扩张容量为3 dataSlice:=make([]map[string]string,3) fmt.Println(dataSlice) fmt.Println("------------") //在切片的索引0位置创建一个key和value都为string类型的map,容量为2 dataSlice[0]=make(map[string]string,2) //给切片的索引0位置,赋map类型的数据,key为user,value为root dataSlice[0]["user"]="root" dataSlice[0]["pwd"]="abc123" fmt.Println(dataSlice) fmt.Println("------------") fori:=rangedataSlice{ fmt.Println(dataSlice[i]) } fmt.Println("------------") fori:=rangedataSlice{ fmt.Println(dataSlice[i]["user"],dataSlice[i]["pwd"]) } }
输出:
[map[] map[] map[]]
------------[map[pwd:abc123 user:root] map[] map[]]------------map[pwd:abc123 user:root]map[]map[]------------root abc123
上面例子,只在切片的索引0位置存储了map元素,索引1和2没有。
8.切片作为map的value,map的key为字符串
packagemain import"fmt" funcmain(){ //声明字符串类型的切片和初始化了两个值 value:=[]string{"192.168.10.12","10.1.1.23"} //声明key类型为字符串,value类型为切片的map,并初始化了一对key和value data:=map[string][]string{ "ip":value, } fmt.Println(data) fmt.Println(data["ip"]) }
输出:
map[ip:[192.168.10.12 10.1.1.23]php]
[192.168.10编程客栈.12 10.1.1.23]
9.map作为map的value
packagemain import"fmt" funcmain(){ value:=map[string]string{ "管理IP":"10.1.2.39", "业务IP":"192.168.12.56", } a:=map[string]map[string]string{ "nginx":value, } fmt.Println(a) fmt.Println(a["nginx"]) fmt.Println(a["nginx"]["管理IP"]) fmt.Println(a["nginx"]["业务IP"]) }
输出:
map[nginx:map[业务IP:192.168.12.56 管理IP:10.1.2.39]]
map[业务IP:192.168.12.56 管理IP:10.1.2.39]10.1.2.39192.168.12.56
到此这篇关于9个golang中map常用示例分享的文章就介绍到这了,更多相关Golang map内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
精彩评论