第5课 Go的map
来源:互联网 发布:淘宝店铺装修广告图片 编辑:程序博客网 时间:2024/06/06 19:55
package mainimport ( "fmt")/* map -类似其他语言中的哈希表或者字典,用key-value形式储存数据 -Key必须是支持==或者!=比较运算的类型,不可以是函数,map或者slice -Map查找比线性搜索快ihenduo,但比使用索引访问数据的类型慢100倍 -Map使用make()创建,支持:=这种简写方式 -make([KeyType]valueType,cap),cap表示容量,可省略 -超出容量时会自动扩容,但尽量提供一个合理的初始值 -使用len()获取元素个数 -键值对不存在时自动添加,使用delete()删除某键值对 -使用for range对map和slice进行迭代操作*/func main() { var m map[int]string m = map[int]string{} fmt.Println(m) //完成了一个map的初始化 var n map[int]string n = make(map[int]string) fmt.Println(n) //也可以用make来创建 p := make(map[int]string) fmt.Println(p) //也是可以的 fmt.Println("-----") m[1] = "OK" a := m[2] fmt.Println(a) //输出空 fmt.Println(m[1]) delete(m, 1) //删除 fmt.Println(m[1]) //删除后输出空 //简单map的操作 fmt.Println("-----")}
package mainimport ( "fmt")func main() { var m map[int]map[int]string //这里创建了两层map m = make(map[int]map[int]string) //这里只初始化了一层map a, ok := m[2][1] //只有一个返回值的时候返回的是取到的值,第二个返回值返回是否键值对存在 if !ok { //如果ok不存在,对map的第二层进行初始化 m[2] = make(map[int]string) } m[2][1] = "good" a, ok = m[2][1] fmt.Println(a, ok) //复杂的map操作}
slice 下的 for-range
package mainimport ( "fmt")func main() { for i, v := range slice { //返回slice相对应的索引,i相当于计数器,v相当于slice所存储的值,是拷贝,不会影响slice本身 //可以通过slice[i]对slice本身进行操作 }}
map下的for-range
package mainimport ( "fmt")func main() { for k, v := range map { //返回k,v键值对(同样是拷贝) //当然可以对m[k]直接对map进行操作 }}
for-range为map初始化
package mainimport ( "fmt")func main() { sm := make([]map[int]string, 5) //这是一个以map为元素的切片,初始化容量、元素为5 for _, v := range sm { v = make(map[int]string, 1) v[1] = "ok" fmt.Println(v) } fmt.Println(sm) /* 输出结果 map[1:ok] map[1:ok] map[1:ok] map[1:ok] map[1:ok] [map[] map[] map[] map[] map[]] 显然v是拷贝的,无法对map本身进行操作 如果要对本身操作,需要做如下修改(利用i) */ smm := make([]map[int]string, 5) for i := range sm { smm[i] = make(map[int]string, 1) smm[i][1] = "ok" fmt.Println(smm[i]) } fmt.Println(smm)}
对map的间接排序
package mainimport ( "fmt" "sort")func main() { //对map的间接排序 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++ } //已经将map存入slice中 fmt.Println(s) //每次打印发现不同,体现map的无序性 sort.Ints(s) //对slice排序 fmt.Println(s) //每次打印出来的是有序的 //我们只能实现对map的间接排序,因为map是无序的,我们只能提取后排序 fmt.Println(m)}
0 0
- 第5课 Go的map
- 第8课 Go的方法method
- Go中map的使用
- go-map的并发问题
- [Go] --- map
- go-map
- go map
- go--map
- 【Go】map
- 谈一谈Go的Map的使用用法
- go语言map的复杂用法
- go语言之map的使用
- go语言的array,slice和map
- Go语言的数组,切片,set,map
- Go语言实现一键多值的Map
- Go语言的map以及sort
- 第1课 go基础知识
- 第11课 Go并发
- 前端开发者不得不知的ES6十大特性
- Redis 学习笔记(十四)Redis存储结构优化
- AppPlugin:Unsupported
- HDU 1166 敌兵布阵 树状数组 区间求和
- hadoop archive 详解《转载》
- 第5课 Go的map
- 数组中重复的数字
- 最容易月薪过万城市排名出炉!
- quartz持久化之配置文件路径
- Java通过百度地图API获取地址经纬度
- redis中各种数据类型对应的jedis操作命令
- bower
- Qt简介
- windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境