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的更多相关文章

  1. java 集合(Map3)

    Map接口下的实现类: HashMap 1.存储原理: 向HashMap中添加元素时,首先会调用hashCode(),算的哈希值,然后 算出该元素在哈希表中的存储位置. 情况1 情况2(java  集 ...

  2. Scala中List(Map1,Map2,Map3 ....) 转成一个Map

    这个问题研究好久...头大,不记得有fold用法了. fold函数:折叠,提供一个输入参数作为初始值,然后大括号中应用自定义fun函数并返回值. list.fold(Map()){(x,y)=> ...

  3. UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢

    实践证明,以下东西都是协程,并非线程(thread): 1,WWW 2,AssetBundle.LoadFromFileAsync 3,LoadSceneAsync 其它未经测试 此问题的提出是由于一 ...

  4. [Hadoop in Action] 第5章 高阶MapReduce

    链接多个MapReduce作业 执行多个数据集的联结 生成Bloom filter   1.链接MapReduce作业   [顺序链接MapReduce作业]   mapreduce-1 | mapr ...

  5. 龙之谷手游WebVR技术分享

    主要面向Web前端工程师,需要一定Javascript及three.js基础:本文主要分享内容为基于three.js开发WebVR思路及碰到的问题:有兴趣的同学,欢迎跟帖讨论. 目录:一.项目体验1. ...

  6. MapReduce工作流多种实现方式

    学习 hadoop,必不可少的就是编写 MapReduce 程序.当然,对于简单的分析程序,我们只需一个 MapReduce 任务就能搞定,然而对于比较复杂的分析程序,我们可能需要多个Job或者多个M ...

  7. GO语言总结(4)——映射(Map)

    上一篇博客介绍了Go语言的数组和切片——GO语言总结(3)——数组和切片,本篇博客介绍Go语言的映射(Map) 映射是一种内置的数据结构,用来保存键值对的无序集合. (1)映射的创建 make ( m ...

  8. java从基础知识(七)java集合

    一.集合类介绍 1.List(元素有放入顺序,可重复) 1.1.List的实现 1.1.1.ArrayList ArrayList就是动态数组(需要连续的存储空间),用MSDN中的说法,就是Array ...

  9. Java json串生成及转bean

      package com; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import j ...

随机推荐

  1. d3与echarts的区别

    1. 目前各大公司的大数据平台多使用d3还是echarts?什么时候适合用echarts,什么时候适合用d3? 在我看几种数据可视化平台多使用折线图,面积图和柱状图,条图居多,对于echarts和d3 ...

  2. em、rpx和px的换算

    rpx:对于小程序开发,所用的单位都是rpx,而不论哪个型号的手机,屏幕宽度都是750rpxrpx与px的转换,根据设计稿换算例如:设计稿750px宽度,ps上量出或者标出的宽度是多少,那么就定义多少 ...

  3. UVAlive 3485 Bridge(抛物线弧长积分)

    Bridge A suspension bridge suspends the roadway from huge main cables, which extend from one end of ...

  4. 【串线篇】spring boot自动配置原理

    配置文件到底能写什么?怎么写?自动配置原理: 配置文件能配置的属性参照 一.自动配置原理: 1.1.SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfigur ...

  5. golang test模块

    1 创建文件夹testing101 2 被测试程序 package testing101 func Sum(numbers []int) int { sum :=0 for _,n :=range n ...

  6. Spring中都用到了哪些设计模式

    JDK 中用到了那些设计模式?Spring 中用到了那些设计模式?这两个问题,在面试中比较常见.我在网上搜索了一下关于 Spring 中设计模式的讲解几乎都是千篇一律,而且大部分都年代久远.所以,花了 ...

  7. Chronograf启动(Influxdb的管理平台)

    1.创建一个bat文件,文件内容如下 @echo off:: 开启chronograf服务,服务监听端口9084echo 开启chronograf服务chronograf.exe /port 9084 ...

  8. 数据库的目录IDF打不开!附加失败

    选择附加数据库,结果 武汉地图打不开 这是mapgis k9里面自带的地图 IDF:Identity Definition File?https://zhidao.baidu.com/question ...

  9. 《Javascript设计模式与开发实践》关于设计模式典型代码的整理:单例模式、策略模式、代理模式、迭代器模式、发布-订阅模式、命令模式、组合模式

    1.单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 使用闭包封装私有变量// 使用闭包创建单例var user = (function () { var _name = 'sven' ...

  10. UE4开发PSVR游戏的常见问题

    Failed to connect to file server at xxx.xxx.xxx.xxx. RETRYING in 5s解决办法:PS4 Devkit 中 Settings->De ...