分享
  1. 首页
  2. 文章

第5课 Go的map

lhdalhd1996 · · 1495 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

package main
import (
 "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 main
import (
 "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 main
import (
 "fmt"
)
func main() {
 for i, v := range slice {
 //返回slice相对应的索引,i相当于计数器,v相当于slice所存储的值,是拷贝,不会影响slice本身
 //可以通过slice[i]对slice本身进行操作
 }
}

map下的for-range

package main
import (
 "fmt"
)
func main() {
 for k, v := range map {
 //返回k,v键值对(同样是拷贝)
 //当然可以对m[k]直接对map进行操作
 }
}

for-range为map初始化

package main
import (
 "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 main
import (
 "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)
}

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:lhdalhd1996

查看原文:第5课 Go的map

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1495 次点击
上一篇:go学习
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏