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的更多相关文章
- java 集合(Map3)
Map接口下的实现类: HashMap 1.存储原理: 向HashMap中添加元素时,首先会调用hashCode(),算的哈希值,然后 算出该元素在哈希表中的存储位置. 情况1 情况2(java 集 ...
- Scala中List(Map1,Map2,Map3 ....) 转成一个Map
这个问题研究好久...头大,不记得有fold用法了. fold函数:折叠,提供一个输入参数作为初始值,然后大括号中应用自定义fun函数并返回值. list.fold(Map()){(x,y)=> ...
- UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢
实践证明,以下东西都是协程,并非线程(thread): 1,WWW 2,AssetBundle.LoadFromFileAsync 3,LoadSceneAsync 其它未经测试 此问题的提出是由于一 ...
- [Hadoop in Action] 第5章 高阶MapReduce
链接多个MapReduce作业 执行多个数据集的联结 生成Bloom filter 1.链接MapReduce作业 [顺序链接MapReduce作业] mapreduce-1 | mapr ...
- 龙之谷手游WebVR技术分享
主要面向Web前端工程师,需要一定Javascript及three.js基础:本文主要分享内容为基于three.js开发WebVR思路及碰到的问题:有兴趣的同学,欢迎跟帖讨论. 目录:一.项目体验1. ...
- MapReduce工作流多种实现方式
学习 hadoop,必不可少的就是编写 MapReduce 程序.当然,对于简单的分析程序,我们只需一个 MapReduce 任务就能搞定,然而对于比较复杂的分析程序,我们可能需要多个Job或者多个M ...
- GO语言总结(4)——映射(Map)
上一篇博客介绍了Go语言的数组和切片——GO语言总结(3)——数组和切片,本篇博客介绍Go语言的映射(Map) 映射是一种内置的数据结构,用来保存键值对的无序集合. (1)映射的创建 make ( m ...
- java从基础知识(七)java集合
一.集合类介绍 1.List(元素有放入顺序,可重复) 1.1.List的实现 1.1.1.ArrayList ArrayList就是动态数组(需要连续的存储空间),用MSDN中的说法,就是Array ...
- Java json串生成及转bean
package com; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import j ...
随机推荐
- Django:django-debug-toolbar模块
简介: Django的django-debug-toolbar 模块是一组可配置的面板,可显示有关当前请求/响应的各种调试信息,并在单击时显示有关面板内容的更多详细信息. GitHub源文件下载地址 ...
- Spark Thrift Server
ThriftServer是一个JDBC/ODBC接口,用户可以通过JDBC/ODBC连接ThriftServer来访问SparkSQL的数据.ThriftServer在启动的时候,会启动了一个Spar ...
- sort对数组排序
描述 Array的sort方法用于对原数组进行排序,不会产生新的数组.排序默认的规则是按照数组元素的字符编码进行排序.如果要按照自己的意愿对数组进行升序或者降序排序,就需要对sort传入一个比较函数 ...
- js中对象的属性名和属性值
代码 /** * 对象的属性名 * - 对象的属性名不强制遵循标识符的命名规范,可以是任意的名字,但在开发中 * 尽量遵循标识符的命名规范 */ // 创建对象obj1 var obj1 = new ...
- vue axios 拦截器
前言 项目中需要验证登录用户身份是否过期,是否有权限进行操作,所以需要根据后台返回不同的状态码进行判断. 第一次使用拦截器,文章中如有不对的地方还请各位大佬帮忙指正谢谢. 正文 axios的拦截器分为 ...
- kali优化配置(2)
下次再安Java吧...心累小赵在线哭泣... 0x01 安装显卡驱动 安装GPU,加速密码破解: grub--kali的启动器 0x02 并发线程限制 ulimit由于限制当前shell内进程的资源 ...
- rocketmq-console控制台管理界面配置
Rocketmq可视化管理控制台配置 前提: RocketMQ有一个对其扩展的开源项目incubator-rocketmq-externals,这个项目中有一个子模块叫“rocketmq-consol ...
- ps:图层的选择
接着我们建立一个名为nose的新层,颜色标记为蓝,画上一个扁椭圆形的鼻子,这样就算完成了一个简单人脸的绘制.此时在图层调板可以看到刚才所建立的所有图层.如下左图. 在图层调板中每个图层的最左边有一个眼 ...
- 浅谈Java集合体系及底层实现原理
集合加载因子 https://blog.csdn.net/qq_34627002/article/details/79769261 底层原理: https://blog.csdn.net/qq_258 ...
- win10下配置多个mysql数据库
mysql正常安装步骤:下载安装参考: 我配置的时8.0.13和5.7.27这两个版本: 配置完第一个数据库之后:复制ini文件给第二个数据库注意修改文件的端口时,先确认端口是否被占用 [mysql] ...