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
步骤:
- 取出map中所有key值存入到切片中
- 利用函数sort(),对切片值进行排序
- 最后按照排好序的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:[我在家 天天睡觉 好快乐啊]]
对于切片有些忘记的,欢迎看看我之前写的切片小结,里面关于切片的操作应有尽有~
map完结!!撒花!