golang语言学习#6-map

golang中map的使用

在golang中声明一个map后,需要对map进行初始化操作,否则map中为nil(也就是其他语言中的null)时,无法对map进行赋值操作

在map中跟声明类型一样,有许多种声明方式,下面我们来一一展现出来

	//声明方法1
	var m1 map [int]string
	m1 = map[int]string{}
	//声明方法2
	var m2 map [int]string
	m2 = make(map[int]string)
	//声明方法3
	var m3 map[int]string = make(map[int]string)
	//声明方法4
	m3 := make(map[int]string)

在上面我们看到我们会对方法进行初始化操作,对于make()内置函数来说,在golang中只能应用与前面学到的slice,现在的map,和以后会用到的chan这三种类型,用于给这三种对象分配内存和初始化操作.

接下来,我们来使用map,初始化的map可以进行存入value,删除value等操作

	 m := make(map[int]string)
	 //存入键值
	 m[1] = "First Value"
	 a := m[1]
	 fmt.Println(m)
	 fmt.Println(a)
	 //删除键值
	 delete(m, 1)
	 a = m[1]
	 fmt.Println(m)
	 fmt.Println(a)
结果输出:
map[1:First Value]
First Value
map[]

golang中的map使用还是非常的方便的.


同样的我们还会遇到map的嵌套

比如:

	var m map[int]map[int]string
	m = make(map[int]map[int]string)
	x, ok := m[1][1]   //判断初始化是否完成
	if !ok {  		   //若未初始化,将map嵌套内的map初始化
		m[1] = make(map[int]string)
	}
	m[1][1] = "Test Ok"
	x, ok = m[1][1]
	fmt.Println(x)
	fmt.Println(m)
结果输出:
Test Ok
map[1:map[1:Test Ok]]

有兴趣的可以看看注释掉4-6行会发生什么。


map的迭代

	//map迭代操作  k->键值对 v->值的拷贝  
	m := make([]map[int]string, 5)
	for i := range m{
		m[i] = make(map[int]string, 1)
		m[i][1] = "ok"
		fmt.Println(m[i])
	}
	fmt.Println(m)	

结果输出:

map[1:ok]
map[1:ok]
map[1:ok]
map[1:ok]
map[1:ok]
[map[1:ok] map[1:ok] map[1:ok] map[1:ok] map[1:ok]]

注意的是,v是对键值的拷贝


map的排序

	m := map[int]string{1 : "a", 2 : "b", 3 : "c", 4 : "d", 5 : "e"}
	s := make([]int, len(m))
	i := 0
	for k, _ := range m{
		s[i] = k
		i++
	}
	sort.Ints(s)
	fmt.Println(s)

注释掉第8行,我们多次输出后,会发现map的输出是无序的,当我们需要输出有序的map时,可以添加sort包来进行map的有序输出

多次运行输出结果:

map[1:a 2:b 3:c 4:d 5:e]


下面我们用所学到的map知识,对map中的key和value做一个交换的demo

	m1 := map[int]string{1 : "a", 2 : "b", 3 : "c"}
	m2 := make(map[string]int)
	s1 := make([]int, len(m1))
	s2 := make([]string, len(m1))
	i := 0
	for k, v := range m1{
		s1[i] = k  //int -> 1, 2, 3
		s2[i] = v  //string -> a, b, c
		m2[v] = k
		i++	
	}
	//fmt.Printf("%v, %v\n",s1, s2)
	sort.Ints(s1)
	sort.Strings(s2)
	fmt.Printf("%v\n",m1)
	fmt.Printf("%v\n",m2)

程序输出:

map[1:a 2:b 3:c]
map[a:1 b:2 c:3]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值