Map
map在go里面也是属于引用类型哈,那么引用类型的话,就要进行一个初始化才可以进行使用。
- 例如举个例子
var m1 = map[string]int
m1["张三"] = 18
m1["李四"] = 35
fmt.Println(m1)
- 这样子,编译器就会报错哈,因为map没有进行初始化,那么前面也说了哈
- 对于 slice、map、chan 的初始化,可以使用make来进行
m1 := make(map[string]int, 10)
m1["张三"] = 18
m1["李四"] = 35
fmt.Println(m1)
- 对map的遍历和取值
value, ok := m1["科科"] // 如果不存在这个key,默认返回的0值
if !ok {
fmt.Printf("查不到人")
} else {
fmt.Printf("%d", value)
}
// map的遍历 key value
for k, v := range m1 {
fmt.Println(k, v)
}
// 只遍历k
for k := range m1 {
fmt.Println(k)
}
// 只遍历value
for _, value := range m1 {
fmt.Println(value)
}
对map按一定的方式进行排序
import (
"fmt"
"math/rand"
"sort"
"time"
)
func main() {
// 随机因子,来生成随机树的
rand.Seed(time.Now().UnixNano())
// 初始化一个map
var scoreMap = make(map[string]int, 200)
// 循环遍历,生产出key 和 value
for i := 0; i < 100; i++ {
key := fmt.Sprintf("stu%02d", i)
value := rand.Intn(100)
scoreMap[key] = value
}
// 创建一个切片,专门用来装字符串key
var keys = make([]string, 0, 200)
for key := range scoreMap {
keys = append(keys, key)
}
// 对切片进行一个排序
sort.Strings(keys)
// 按照已经排好序的key将数据输出来
for _, key := range keys {
fmt.Println(key, scoreMap[key])
}
}
更为复杂的类型, map切片
- 注意的是,创建了切片以后,里面的map并没有进行初始化的操作。
// 元素为map 的切片
s1 := make([]map[int]string, 10, 10)
s1[0] = make(map[int]string, 1)
s1[0][10] = "科科大宝贝"
fmt.Println(s1)
值为切片类型的map
s2 := make(map[string][]int, 10)
s2["北京"] = []int{10, 20, 30}
fmt.Println(s2)