Map3

Posted green-frog-2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Map3相关的知识,希望对你有一定的参考价值。

map切片:

切片的数据类型如果是map,则我们称为 slice of map, map切片,这样使用则map个数就可以动态变化了。

案例演示:
要求:会用一个map来记录monster的信息 name 和 age,也就是说一个monster 对应一个map,并且妖怪的个数可以动态的增加=>map切片

func main()

  //1.声明一个map切片
  var monsters []map[string]string
  monsters = make([]map[string]string, 2) //准备放入2个妖怪
  //2.增加第一个妖怪的信息
  if monsters[0] == nil
    monsters[0] = make(map[string]string)
    monsters[0]["name"] = "牛魔王"
    monsters[0]["age"] = "500"
  

  if monsters[1] == nil
    monsters[1] = make(map[string]string)
    monsters[1]["name"] = "玉兔精"
    monsters[1]["age"] = "400"
  

  //下面这个写法越界。
  /*
  if monsters[2] == nil
    monsters[2] = make(map[string]string)
    monsters[2]["name"] = "狐狸精"
    monsters[2]["age"] = "300"
  
  */

  //这里我们需要使用到切片的append函数,可以动态的增加一个妖怪
  //1.先顶一个monster信息
  newMonster := map[string]string
    "name" : "新的妖怪~火云邪神",
    "age" : "200",
  
  monsters = append(monsters, newMonster)
  fmt.Println(monsters)

 

map排序:

基本介绍:

1)golang中没有一个专门的方法针对map的key进行排序

2)golang中的map默认是无序的,注意也不是按照添加顺序存放的,你每次遍历,得到的输出可能都不一样。

3)golang中map的排序,是先将key进行排序,然后根据key值遍历输出即可。

案例演示:

package main
import (
  "fmt"
  "sort"
)

func main()

  map1 := make(map[int]int, 10)
  map1[10] = 100
  map1[1] = 13
  map1[4] = 56
  map1[8] = 90
  //如果按照map的key的顺序进行排序输出
  //1.先将map的key 放入到 切片中
  //2.对切片排序
  //3.遍历切片,按照key来输出这个map的值
  var keys []int
  for k, _ := range map1
    keys = append(keys, k)
  
  //排序
  sort.Ints(keys)
  for _, k := range keys
    fmt.Printf("map1[%v]=%v \\n", k, map1[k])
  

技术图片

 

map使用细节:

1)map是引用类型,遵守引用类型传递的机制,在一个函数接收map,修改后,会直接修改原来的map

func modify(map1 map[int]int)
  map1[10] = 900

func main()
  map1 := make(map[int]int)
  map1[1] = 90
  map1[2] = 88
  map1[10] = 1
  map1[20] = 2
  modify(map1)
  fmt.Println(map1)

2)map的容量达到后,再想map增加元素,会自动扩容,并不会发生panic,也就是说map 能动态的增长 键值对(key-value)


3)map的value 也经常使用struct 类型,更适合管理复杂的数据(比前面value是一个map更好),比如value为 Student 结构体

func main()

  //1.map 的 key 为学生的学号,是唯一的
  //2.map 的 value 为结构体,包含学生的 名字,年龄,住址

  students := make(map[string]Stu, 10)
  //创建2个学生
  stu1 := Stu"tom", 18, "北京",
  stu2 := Stu"mary", 28, "上海"
  students["no1"] = stu1
  students["no2"] = stu2

  //遍历各个学生信息
  for k, v := range students
    fmt.Printf("学生的编号是%v \\n", k)
    fmt.Printf("学生的名字是%v \\n", v.Name)
    fmt.Printf("学生的年龄是%v \\n", v.Age)
    fmt.Printf("学生的住址是%v \\n", v.Address)
    fmt.Println()
  

技术图片

 

以上是关于Map3的主要内容,如果未能解决你的问题,请参考以下文章

大数据分析的特点都有哪些

用映射字典的值替换嵌套字典中的占位符

redis 怎么实现map内嵌list

Mybatis批量更新,批量删除

map文件的使用

STLsetmapmultisetmultimap