Go学习之旅之map小结(2)| Go主题月

185 阅读3分钟

前文:juejin.cn/post/695359…

4. 删除map元素

delete(map, key)
//删除m1中与”蓝天白云“对应的键值对
delete(m1,"蓝天白云")

5. 遍历map元素

分别有对map整个键值对的遍历,还有分别单独对键和值的遍历。

package  main
import "fmt"
//map
 
func main(){
	var m1 map[string] int
	m1 = make(map[string]int,10)
	m1["蓝天白云"] = 4
	m1["还有一个"] = 4
  
	//map的遍历
	fmt.Println("map的遍历:")
	for key,value := range m1{
		fmt.Println(key,value)
	}
	//只遍历key
	fmt.Println("只遍历key:")
	for key := range m1{
		fmt.Println(key)
	}
	//只遍历value
	fmt.Println("只遍历value:")
	for _,value := range m1{
		fmt.Println(value)
	}
}

输出结果:

map的遍历:
蓝天白云 4
还有一个 4
只遍历key:
蓝天白云
还有一个
只遍历value:
4
4

注意:重复的value值都会一一遍历。

6. 利用切片按照指定顺序遍历map

步骤:

  1. 取出map中所有key值存入到切片中
  2. 利用函数sort(),对切片值进行排序
  3. 最后按照排好序的key遍历map
package  main
import "fmt"
import "math/rand"
import "sort"
import "time"

func main() {
	//初始化随机数种子
	//time.Now().UnixNano获得当前时间的纳秒数
	rand.Seed(time.Now().UnixNano()) 

	var scoreMap = make(map[string]int,10)

	for i := 0; i < 10; i++ {
		key := fmt.Sprintf("stu%02d", i) //生成stu开头的字符串
		value := rand.Intn(1000)          //生成0~999的随机整数
		scoreMap[key] = value
	}

	fmt.Println(scoreMap)
	//取出map中的所有key存入切片keys
	var keys = make([]string, 0, 10)
	for key := range scoreMap {
		keys = append(keys, key)
	}
	//调用sort()对切片进行排序
	sort.Strings(keys)
	//按照排序后的key遍历map
	for _, key := range keys {
		fmt.Println(key, scoreMap[key])
	}
}

输出结果:

map[stu00:484 stu01:283 stu02:81 stu03:198 stu04:267 stu05:572 stu06:646 stu07:442 stu08:674 stu09:55]
stu00 484
stu01 283
stu02 81
stu03 198
stu04 267
stu05 572
stu06 646
stu07 442
stu08 674
stu09 55

7. 获取map中值,同时判断是否存在该值

v,exists := m1["青青草原"]
fmt.Printf("%d %t",v,exists)

输出:

7 true

8. Slice元素为map类型

注意:

除了对slice初始化以外,也要对map进行初始化

package  main
import "fmt"

func main() {
	//元素为map类型的切片,切片大小为10,容量为10,map索引是string类型,值是int类型
	var slice = make([]map[int]string,10,10)
	//对内部的map做初始化
	slice[0] = make(map[int]string,1)
	slice[0][0] = "洗刷刷"
	slice[1] = make(map[int]string,2)
	slice[1][0] = "洗白白"
	slice[1][1] = "小灰兔"
	fmt.Println(slice)
}

输出结果:

[map[0:洗刷刷] map[0:洗白白 1:小灰兔] map[] map[] map[] map[] map[] map[] map[] map[]]

9. map中元素为slice类型

package  main
import "fmt"

//map中值为slice
func main() {
	//map[int][]string不要错写成map[int]string,这样就不是定义一个切片了
	var m = make(map[int][]string,10)
	//[[]string{"我在家","天天睡觉","好快乐啊"}初始化string类型切片
	m[0] = []string{"我在家","天天睡觉","好快乐啊"}
	fmt.Println(m)
}

输出结果:

map[0:[我在家 天天睡觉 好快乐啊]]

对于切片有些忘记的,欢迎看看我之前写的切片小结,里面关于切片的操作应有尽有~

juejin.cn/post/695126…

map完结!!撒花!