08 map(字典/哈希) 迭代

类似其它语言中的哈希表或者字典,以key-value形式存储数据
Key必须是支持==或!=比较运算的类型,不可以是函数、map或slice
Map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
Map使用make()创建,支持 := 这种简写方式

make([keyType]valueType, cap),cap表示容量,可省略
超出容量时会自动扩容,但尽量提供一个合理的初始值
使用len()获取元素个数

var m map[int]string
m = map[int]string{}//或m = make(map[int]string)

var m map[int]string = make(map[int]string)
m[1] = "OK"
fmt.Pringln(m)
a := m[1] //这个是引用类型 如果吧m[1]删除 a就是空了 没有了

键值对不存在时自动添加,使用delete()删除某键值对
使用 for range 对map和slice进行迭代操作
delete(map,key)

复杂map
var m map[int]map[int]string
m = make(map[int]map[int]string)
m[1]=make(map[int]string)
m[1][1]="OK"
m[2]=make(map[int]string)
m[2][1]="OK"
//这里每次都要定义一个
所以需要增加一个方法来更加简便化多维map的make
a, ok := m[2][1]//如果没有定义 返回的ok为false 如果有定义返回的是true
if !ok {
m[2]=make(map[int]string)
}
m[2][1] = "good"
a, ok= m[2][1]
fmt.Println(a, ok)//输出good true

//如果多层都要进行多层次的检查一层层的make过去

迭代
比foreach高级一点的东西
for i,v := range slice{
}
for i,v := range map{
}

//和php中的foreach相同
foreach(slice或map $i=>$value){
}

sm := make([]map[int]string,5)
for _, v := range sm{
v := make(map[int]string,1)
v[1] = 'OK'
fmt.println(v)
}
fmt.println(sm)
//和php中foreach一样$value 是属于拷贝,不是引用
//如果要做到foreach下的初始化同样的 用i就可以
sm := make([]map[int]string,5)
for i := range sm{
sm[i] = make(map[int]string,1)
sm[i][1] = 'OK'
fmt.println(sm[i])
}
fmt.println(sm)

map排序
//map是无序的 排序要用slice来实现
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)//需要导入import包sort
fmt.Println(s)
//根据这里的s的循环来取出map里面的数据 其实是一种间接的排序

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 01.{ 换行: Opening Brace Can't Be Placed on a Separate Lin...
    码农不器阅读 2,507评论 0赞 14
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,262评论 18赞 399
  • fmt格式化字符串 格式:%[旗标][宽度][.精度][arg索引]动词旗标有以下几种:+: 对于数值类型总是输出...
    皮皮v阅读 1,269评论 0赞 3
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 13,083评论 0赞 33
  • Map map以key-value的形式存储 key必须是支持==或者!=比较运算的类型,不能是函数、map或sl...
    kaxi4it阅读 639评论 0赞 0

友情链接更多精彩内容