zoukankan      html  css  js  c++  java
  • 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 ", 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 ", k)
        fmt.Printf("学生的名字是%v ", v.Name)
        fmt.Printf("学生的年龄是%v ", v.Age)
        fmt.Printf("学生的住址是%v ", v.Address)
        fmt.Println()
      }
    }

  • 相关阅读:
    内置函数
    递归函数:
    函数(迭代器与生成器)
    函数的装饰器
    函数:(函数的名字,闭包)
    函数(命名空间,作用域,嵌套)
    函数:(定义,调用,返回值和参数)
    hdu 4267 A Simple Problem with Integers(线段树)
    hdu 2089 不要62 hdu 3555 Bomb (数位DP)
    poj 2955 Brackets (区间DP)
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11403093.html
Copyright © 2011-2022 走看看