【概念】
    1- map 是引用类型的
    2- 声明方式
        var map1 map[keytype]valuetype    
        例如:var map1 map[string]int
    3- map是可以动态自增长的
    4- 未初始化的map的值是nil
    5- 可以是任意用==或者!=操作符比较的类型,比如string,int,float。不常用的还有指针和接口类型也可以。切片和结构体不行(如果要用结构体做key,需要做变通,使用提供Key(),Hash()方法)
    6- value可以是任意值
    7- map传递给函数的代价很小,在32位机器上占4个字节,在64位机器上占用8个字节,无论实际存储了多少数据。
        备注:在map中查找比线性查找快,但是比数组和切片的索引中直接读取要慢100倍,在乎性能请使用切片或数组
    8- 不要使用new来构造map,永远使用make来构造map
        备注:若使用了new()分配了一个引用对象,你会获得一个空引用的指针,相当于声明了一个未初始化的变量并且取得了它的地址
 
 
【map容量】
    map的长度是动态的,它不存在固定长度和限制最大长度,但是我们也可以标明map的初始容量:make(map[int]string, cap),出于性能考虑还是应该在大容量和快速扩张的map中标明初始化容量
 
 
【map的常用操作】
    1- 测试键值对是否存在
            备注:map[key]  有两个返回值,第一个是该map键对应的值,第二个返回值是True(该键对应有值)或False(该键对应没有值)
 _,ok := map[key]
if _,ok := map[key];ok{
// do something
}
package main
func main(){
mf := make(map[int]string,2)
mf[1] = "hello"
mf[2] = "world" // 测试键值是否存在
if _,ok := mf[1];ok{
fmt.Printtf("key %d exists")
}else{
fmt.Printf("key %d unexists")
} // 删除键值
delete(mf,1)
}
    2- 删除键值对
            delete(mf, 1)
 
 
【map的for-range输出值】
    map既不是按照key的顺序排列的,也不是按照value的值排列的,每次输出都是随机
 package main

 import "fmt"

 func main(){
mf := map[int]string{1:"hello",2:"world"}
for key := range mf{
// 每次运行输出的顺序都不同
fmt.Printf("%d = %s",key,mf[key])
}
}
 

package main

func main(){
// map的值是一个函数
mf := map[int]func() int{
1:func()int{return 10},
2:func()int{return 20},
} // map的值是一个切片
mf1 := make(map[int][]string)
mf2 := make(map[int]*[]string)
}
  【学习参考处:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md】

Go笔记-map的更多相关文章

  1. golang笔记——map

    通过 new 创建的引用类型对象是不完整创建,比如 map,它仅分配了字典类型本身所需的内存(指针包装),而没有分配键值存储内存,也没有初始化散列桶等内部属性,因此无法工作,如下代码就是错误的: p ...

  2. 集合用法笔记-Map用法

    一.Map遍历 Map<String, String> map = new HashMap<String, String>(); map.put("1", ...

  3. Python自学笔记-map和reduce函数(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. Python内 ...

  4. python学习笔记 map&&reduce

    ---恢复内容开始--- 1.map 1)map其实相当对吧运算符进行一个抽象,返回的是一个对象,但是这里不知道为什么不可以对一个map返回变量打印两次,难道是因为回收了? def f(x): ret ...

  5. Python学习笔记 - map reduce

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- def f(x): return x * x r = map(f, [1, 2, 3, 4, 5, 6, ...

  6. python练习笔记——map | sum | pow 的应用

    1 函数简要 map 函数  | sum 函数  |  pow函数  | lambda函数 2 简要计算 2.1 1^2 + 2^2 + 3^2 .....9^2 方法1 print([pow(x,2 ...

  7. GO学习笔记 - map

    map是GO语言中的一种高级数据类型,特点是key和value对应,这和Delphi中的Dictionary一样!map的声明格式:map[key数据类型]value数据类型.使用map前,必须用ma ...

  8. Java学习笔记——Map接口

    Map接口 Map接口 Map接口中键和值一一映射. 可以通过键来获取值. 异常 NoSuchElementException:访问的值不存在 ClassCastException:对象类型错误 Un ...

  9. go语言笔记——map map 默认是无序的,不管是按照 key 还是按照 value 默认都不排序

    示例 8.1 make_maps.go package main import "fmt" func main() { var mapLit map[string]int //va ...

随机推荐

  1. CTF---密码学入门第一题 这里没有key

    这里没有key分值:10 来源: 西普学院 难度:易 参与人数:5577人 Get Flag:1965人 答题人数:2074人 解题通过率:95% 你说没有就没有啊,俺为啥要听你的啊 解题链接: ht ...

  2. BZOJ:4209: 西瓜王

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4209 (虽然仅仅是看在名字的份上,我们还是得说这题是一道) 绝世好题!西瓜王!西瓜王!西瓜 ...

  3. BZOJ 2257: [Jsoi2009]瓶子和燃料【数论:裴蜀定理】

    2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1326  Solved: 815[Submit][Stat ...

  4. [bzoj1587] [Usaco2009 Mar]Cleaning Up 打扫卫生

    首先(看题解)可得...分成的任意一段中的不同颜色个数都<=根号n...不然的话直接分成n段会更优= = 然后就好做多了.. 先预处理出对于每头牛i,和它颜色相同的前一头和后一头牛的位置. 假设 ...

  5. 搭建ruby环境

  6. jQuery:下拉列表的联动

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  7. Shell常用命令整理

    http://blog.csdn.net/junmail/article/details/4602745 1.   ls: 类似于dos下的dir命令 ls最常用的参数有三个: -a -l -F. l ...

  8. react项目中遇到的坑

    1,touchStart和touchEnd 如果touchstart和touchend改变的是同一个state,那么在首次加载渲染的时候组件会陷入死循环,原因是touchstart会直接触发,但此时s ...

  9. c#中RGB与int类型之间的转换

    Color color = Color.FromArgb(0, 0, 255);int colorInt = ParseRGB(color); --------------------- int Pa ...

  10. fhs文件系统层级结构

    文件系统:操作系统用于明确存储设备或分区上的文件的方法和数据结构:层次化管理文件的结构就是文件系统: linux层次化文件结构,倒树状结构文件结构        FHS  filesystem hie ...