go map数据结构
map数据结构
key-value的数据结构,又叫字典或关联数组
- 声明:
var map1 map[keytype]valuetype
var a map[string]string
var a map[string]int
var a map[int]string
var a map[string]map[string]string
备注:声明是不会分配内存的,初始化需要make
样例一:
func testMap() {
var a map[string]string
a = make(map[string]string, 10)
a["abc"] = "efg"
a["abc"] = "efg"
a["abc1"] = "efg"
fmt.Println(a)
}
样例二:
func testMap() {
a := make(map[string]string, 10)
a["abc"] = "efg"
a["abc"] = "efg"
a["abc1"] = "efg"
fmt.Println(a)
}
样例三:
func testMap() {
var a map[string]string = map[string]string{
"key": "value",
}
a["abc"] = "efg"
a["abc"] = "efg"
a["abc1"] = "efg"
fmt.Println(a)
}

- map相关操作
var a map[string]string = map[string]string{"hello": "world"}
a = make(map[string]string, 10)
插入和更新:a[“hello”] = “world”
查找:Val, ok := a[“hello”]
遍历:
for k, v := range a {
fmt.Println(k,v)
}
删除:delete(a, “hello”)
长度:len(a)
func trans(a map[string]map[string]string) {
for k, v := range a {
fmt.Println(k)
for k1, v1 := range v {
fmt.Println("\t", k1, v1)
}
}
}
func testMap4() {
a := make(map[string]map[string]string, 100)
a["key1"] = make(map[string]string)
a["key1"]["key2"] = "abc"
a["key1"]["key3"] = "abc"
a["key1"]["key4"] = "abc"
a["key1"]["key5"] = "abc"
a["key2"] = make(map[string]string)
a["key2"]["key2"] = "abc"
a["key2"]["key3"] = "abc"
trans(a)
delete(a, "key1")
fmt.Println()
trans(a)
fmt.Println(len(a))
}
- 多层map
func testMap2() {
a := make(map[string]map[string]string, 100)
a["key1"] = make(map[string]string)
a["key1"]["key2"] = "abc"
a["key1"]["key3"] = "abc"
a["key1"]["key4"] = "abc"
a["key1"]["key5"] = "abc"
fmt.Println(a)
}

- slice of map
func testMapSlice() {
s := make([]map[string]int, 10)
for i := 0; i < len(s); i++ {
s[i] = make(map[string]int, 100)
}
s[0]["abc"] = 100
s[0]["qwe"] = 100
s[5]["abc"] = 100
fmt.Println(s)
}

备注:上面第一次make是切片的长度,第二次make是map的容量
- map排序
a. 先获取所有key,把key进行排序
b. 按照排序好的key,进行遍历
func testMapSort() {
var a map[int]int
a = make(map[int]int, 5)
a[8] = 10
a[3] = 10
a[2] = 10
a[1] = 10
a[18] = 10
var keys []int
for k, _ := range a {
keys = append(keys, k)
//fmt.Println(k, v)
}
sort.Ints(keys)
for _, v := range keys {
fmt.Println(v, a[v])
}
}

- map反转
初始化另外一个map,把key、value互换即可
func test() {
var a map[string]int
var b map[int]string
a = make(map[string]int, 5)
b = make(map[int]string, 5)
a["abc"] = 101
a["efg"] = 10
fmt.Println(a)
for k, v := range a {
b[v] = k
}
fmt.Println(b)
}

go map数据结构的更多相关文章
- 11 Set和Map数据结构
Set和Map数据结构 Set WeakSet Map WeakMap 首先 这四个对象都是 数据结构. 用于存放数据 Set 类似数组. 但是不能重复. 如果你有重复数据,会自动忽略 属性 size ...
- ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环
ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. va ...
- ES6中的Set、Map数据结构
Map.Set都是ES6新的数据结构,他们都是新的内置构造函数.也就是说typeof的结果,多了两个. 他们是什么: Set是不能重复的数组. Map是可以任何东西当做键的对象: ES6 提供 ...
- ECMAScript 6之Set和Map数据结构
Set 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. var s = new Set(); [2, ...
- set和 map 数据结构
set/map数据结构 创建: var s=new Set(); 添加成员 s.add(1) 遍历 for of s.froEach 删除 s.delete() 判断存在 s.has() 清除 s. ...
- es6学习笔记-set和map数据结构
ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3 ...
- js-ES6学习笔记-Set和Map数据结构
1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. 2.Set 函数可以接受一个数组(或类似数组的对 ...
- JavaScript(ES6)学习笔记-Set和Map数据结构(一)
一.Set 1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. , , , , ']); s; // ...
- Map 数据结构
JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键.这给它的使用带来了很大的限制. 为了解决这个问题,ES6 提供了 Map 数据结构. ...
随机推荐
- Maven相关问题解决.docx
1. 问题 2. 原因 出现.lastUpdated结尾的文件的原因:由于网络原因没有将Maven的依赖下载完整,导致. 解决方案: 1.删除所有以.lastUpdate结尾的文件 a)1.切换到ma ...
- SQLServer:介质簇计数 缺失的介质簇序列号
https://shiyousan.com/post/635886596017415485 http://www.cnblogs.com/yc-755909659/p/3725940.html 错误描 ...
- JQuery 操作 radio 被坑一例
.removeAttr('checked'); .prop('checked',false); .prop('checked',true); 与 .attr("checked",t ...
- Oracle 数据库启动过程
一 启动数据库 Oracle启动过程涉及几种模式,这些模式涉及不同的文件,每个状态下数据库做不同的事情,同时这些模式适用于不同的维护需求,主要的模式有三种:NOMOUNT.MOUNT.OPEN. 1 ...
- oracle 18c centos7 设置开机自动启动Oracle
学习自: http://blog.csdn.net/condywl/article/details/57129696 1. 在root用户下进行修改 配置文件 /etc/oratab vim /etc ...
- Docker 修改默认存储路径的一个方法
1. 前期安装创建centOS的虚拟机时发现自己对linux的挂载点不清楚, 造成挂载点的分配不太均匀,如图: root / 节点的大小设置的比较小 /home路径设置的一直比较大 但是docker ...
- [转帖]DevOps/TestOps概念
发现收藏不好用..还是转吧.. https://www.cnblogs.com/fnng/p/8232410.html DevOps/TestOps概念 2018-01-07 22:02 by 虫师, ...
- 数据类型+内置方法 python学习第六天
元组 用途:不可变的列表,能存多个值,但多个值只有取的需求而没有改的需求. 定义方式:在()内用逗号分隔开多个元素,可以存放任意类型的值. names=(‘alex’,’blex’,’clex’) 强 ...
- Delphi中统一显示表格字段名的高效方法
问题描述:在开发数据库程序时,我们经常要使用很多的表格显示组件DBGrid.当DBGrid显示某表格的数据时,其字段标题默认的就是后台数据库中的表格的字段名称.而为了数据库开发方便,后台数据库中的表格 ...
- python之工作举例:通过复制NC文件来造数据
# 通过对NC文件复制来造数据 import os, shutil # 遍历的根目录 root_dir = "D:\\test_data\\DISASTER\\" # 获取NC文件 ...