what's map

go里面的map和python字典差不多。

  • 类似其他语言中的哈希表或者字典,以key-value的形式存储的数据
  • key必须是支持==或者!=比较运算的类型,不可以是函数、map或者slice
  • map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
  • map使用make()创建,支持:= 这种简写方式
  • make([keyType]valueType,cap),cap表示容量,可以省略
  • 超出容量时会自动扩容,但尽量提供一个合理的初始值
  • 使用len()获取元素个数
  • 键值对不存在的时候自动添加,使用delete() 删除某键值对
  • 使用for range 对 map 和slice 进行迭代操作
如何简单的创建map

请看代码例子:

func main() {
var m map[int]string
m = map[int]string{}
var m map[int]string = make(map[int]string) // 或者也可以这样写
n := make(map[int]string) // 或者这样写
fmt.Println(m)
}
map的简单用法

主要介绍如何给map添加值,怎么从map里面取值,怎么删除指定key的值在map里面

package main

import (
"fmt"
) func main() {
m := make(map[int]string) // 创建map
m[1] = "ok" // 给map赋值
m[2] = "go"
a := m[2] // 取出key为1的值
delete(m, 1) // 删除指定key的值
fmt.Println(m, a)
}
map高级用法之一-两层map嵌套
  1. 在map里面在嵌套一层map
package main

import (
"fmt"
) func main() {
m := make(map[int]map[int]string) // 申明一个m
m[1] = make(map[int]string) // 声明m[1]是一个map
m[1][1] = "OK" // 往m[1]里面开始插入值
fmt.Println(m)
}
  1. 多层嵌套的返回值
func main() {
m := make(map[int]map[int]string)
m[1] = make(map[int]string)
m[2] = make(map[int]string)
m[1][1] = "OK"
a, i := m[2][1] // 此时我们从未定义这个值的话,取这个值第一个a是空值,第二个i是false表示未定义,如果是true表示定义了
fmt.Println(m)
fmt.Println(a, i)
}
map高级用法之二-数组元素全是map与for循环遍历该数组

我们创建一个数组,数组的元素都是map,此时如果我们想遍历这个数组的元素,每个元素都赋值下,该怎么做?

  1. 错误做法:
func main() {
sm := make([]map[int]string, 5)
for _, v := range sm {
v = make(map[int]string, 1)
v[1] = "OK" // v只是这个map的一个拷贝,所以这个v即使做了赋值,也影响不到sm
fmt.Println(v)
}
fmt.Println(sm)
}
  1. 正确的做法:
func main() {
sm := make([]map[int]string, 5)
for i := range sm {
sm[i] = make(map[int]string, 1) // 直接把map给赋值,从而影响到sm
sm[i][1] = "OK"
}
fmt.Println(sm)
}

练习1: 如何对map 的可以进行排序

map的key是无序的,那么如何进行排序呢?请看下面的代码

package main

import (
"fmt"
"sort"
) func main() {
m := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}
s := make([]int, len(m))
i := 0
for k, _ := range m {
s[i] = k
i++
}
sort.Ints(s)
fmt.Println(s)
}

练习2: 如何把一个map的K/V 对换位置

举个例子:

m:{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}

我对调下K/V的位置,结果如下:

m2: {c:3 d:4 e:5 a:1 b:2}

了解以后请看代码:

package main

import (
"fmt"
) func main() {
m := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}
m2 := map[string]int{}
for k, v := range m {
m2[v] = k
}
fmt.Println("m", m)
fmt.Println("m2", m2)
}

8 map的用法的更多相关文章

  1. c++map的用法 分类: POJ 2015-06-19 18:36 11人阅读 评论(0) 收藏

    c++map的用法 分类: 资料 2012-11-14 21:26 10573人阅读 评论(0) 收藏 举报 最全的c++map的用法 此文是复制来的0.0 1. map最基本的构造函数: map&l ...

  2. STL中map的用法

    map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  3. C++11中map的用法

    最全的c++map的用法 1. map最基本的构造函数:map<string ,int>mapstring; map<int,string >mapint;map<sri ...

  4. entrySet用法 以及遍历map的用法

    entrySet用法 以及遍历map的用法   keySet是键的集合,Set里面的类型即key的类型entrySet是 键-值 对的集合,Set里面的类型是Map.Entry   1.keySet( ...

  5. python map 常见用法

    python map 常见用法2017年02月01日 19:32:41 淇怪君 阅读数:548版权声明:欢迎转载,转载请注明出处 https://blog.csdn.net/Tifficial/art ...

  6. forEach、for+i、map的用法及区别

      array.forEach(callback[, thisObject]); 下面是参数的详细信息: 1. callback : 函数测试数组的每个元素. 2.thisObject : 对象作为该 ...

  7. set/multiset和map/multimap用法小结

    二叉搜索树是ACM中经常需要用到的数据结构,熟练掌握map和set的用法很关键,现对其做一个简单的总结. 主要的功能有:插入元素,查找元素,删除,遍历/反向遍历. 插入,删除和查找操作的时间都和树的高 ...

  8. STL 之 map的用法

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  9. js数组中foEach和map的用法详解 jq中的$.each和$.map

    数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...

随机推荐

  1. THINKPHP短链接设置方法(路由设置)

    //路由设置(短链接设置) 'URL_ROUTER_ON' => true, 'URL_ROUTE_RULES' => array( 'log' => 'Login/index', ...

  2. C#如何调用R

    1. 现在R中安装rscproxy库 > install.packages(rscproxy) > library(rscproxy)   2. 到这个网站http://rcom.univ ...

  3. C语言 · 字串逆序

    算法训练 字串逆序   时间限制:1.0s   内存限制:512.0MB      问题描述 给定一个字符串,将这个串的所有字母逆序后输出. 输入格式 输入包含一个字符串,长度不超过100,字符串中不 ...

  4. fiddler手机端抓包

    1. 买个360随身wifi,插在台式机上生成热点,手机连上自己的wifi 如果电脑与手机本就在一个局域网,省略这一步 2. 在fiddler中如下设置: 3. 查看电脑无线连接属性 4. 在手机上设 ...

  5. php 扩展包链接

    https://pecl.php.net/package-stats.php?cid=7

  6. <转> linux进程状态的说明

    我只是做一个mark,为了日后复习:http://blog.csdn.net/tianlesoftware/article/details/6457487 他写得非常的详细,值得推荐. 补充一点什么是 ...

  7. 17个CSS知识点整理

    1.对WEB标准以及W3C的理解与认识 标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率:使用外链css和js脚本.结构行为表现的分离.文件下载与页面速度更快:内容能被更多的用户所访问.内容能被更 ...

  8. ggplot2 pdf import in Adobe Illustrator missing font AdobePiStd

    The font AdobePiStd is missing. Affected text will be displayed using a substitute font. 缺少字体 AdobeP ...

  9. Oracle Grid Infrastructure Installation Guide for Linux 以debug模式安装并记录日志

    最新文章:Virson's Blog 使用如下命令能够以debug模式安装Oracle Grid并将日志记录到文件 [grid@vdb1 11ggrid]$ ./runInstaller -debug ...

  10. Python之从numpy.array保存图片

    1.用scipy import scipy scipy.misc.imsave('test.jpg', img) 2.用PIL from PIL import Image im = Image.fro ...