开发者

9个Golang中map常用示例分享

开发者 https://www.devze.com 2023-02-17 11:08 出处:网络 作者: TtrOps
目录1.基本使用2.声明的同时一起初始化3.判断key是否存在4.遍历map5.删除k-v对6.map是无序的,如何让其按照指定的顺序遍历map7.map作为元素存储到切片中8.切片作为map的value,map的key为字符串9.map作为map的value1
目录
  • 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]

25

type 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]

25

22

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 0

yes

no

如果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 22

xiaozhang 23

xiaoshi 21

xiaoyu 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.0

host02 10.1.1.37

host05 10.1.1.97

host06 10.1.1.61

host07 10.1.http://www.devze.com1.62

host08 10.1.1.28

host09 10.1.1.40

host01 10.1.1.62

host04 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.98

host02 10.1.1.93

host03 10.1.1.4

host04 10.1.1.1

host05 10.1.1.28

host06 10.1.1.11

host07 10.1.1.43

host08 10.1.1.31

host09 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.39

192.168.12.56

到此这篇关于9个golang中map常用示例分享的文章就介绍到这了,更多相关Golang map内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号