-
Map的知识点
- Map是无序的,所以每次遍历的顺序随机
- 原生的Map不支持并发读写
- Map中 Key 必须要是被比较类型 Value 可以是任意类型
不可被比较的 : slice、map 、 func - Map的底层结构是HSMap
-
Map的排序 – 核心思想就是拿到key排序后再用key取值
m := map[int]string{} m[21] = "Henry" m[21] = "Nancy" m[19] = "Bob" m[22] = "David" m[18] = "Duck" m[23] = "Ada" key := make([]int, 0) for k := range m { key = append(key, k) } sort.Ints(key) for i := 0; i < len(key); i++ { fmt.Printf("m[%d] = %s\n",key[i],m[key[i]]) }
-
Map的寻址
type Person struct { ID string Name string } func main() { // map 的 value 是指针 perPoint := make(map[int]*Person) perPoint[1] = &Person{ ID: "001", Name: "Henry001", } perPoint[2] = &Person{ ID: "002", Name: "Bob002", } fmt.Println(perPoint[1]) sPoint := perPoint[1] // 更改复制后的值,也会更改原来的值 复制的值是地址 sPoint.ID = "003" fmt.Println(perPoint) fmt.Printf("%v %p\n",perPoint[1],perPoint[1]) // Map 的 value 是值 perValue := make(map[int]Person) perValue[1] = Person{ ID: "101", Name: "Henry101", } perValue[2] =Person{ ID: "102", Name: "Bob102", } sValue := perValue[1] // 更改复制之后的值,不会更改原来的值 复制的值是struct的值 sValue.ID = "103" fmt.Println(perValue) fmt.Printf("%v %s\n",perValue[1],perValue[1]) }
-
面试题
【中级】关于map,下面说法正确的是() A. map反序列化时json.unmarshal的入参必须为map的地址 B. 在函数调用中传递map,则子函数中对map元素的增加不会导致父函数中map的修改 C. 在函数调用中传递map,则子函数中对map元素的修改不会导致父函数中map的修改 D. 不能使用内置函数delete删除map的元素 参考答案:A 【初级】使用map不需要引入任何库() 参考答案:T
Golang从入门到放弃200618--Map(2)Map的排序以及值的指针
最新推荐文章于 2023-06-25 09:59:47 发布