Go数据类型 map
Posted sss4
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go数据类型 map相关的知识,希望对你有一定的参考价值。
前言
Go语言中提供了映射关系容器为map
,其内部使用散列表(hash)
实现。类似Python中的字典。
map的定义及基本操作
package main import "fmt" func main() { //定义了1个map变量,key是sring类型、value是int类型 var m1 map[string]int fmt.Println(m1 == nil) //还没有初始化(没有在内存中开辟空间) //初始化:估算好map的容量,避免程序运行期间在扩容 m1 = make(map[string]int, 10) m1["年龄"] = 18 fmt.Println(m1) fmt.Println(m1["年龄"]) //获取不存在的key v, ok := m1["姓名"] if !ok { fmt.Println("没有该key") } else { fmt.Println(v) } //直接获取不存在的key,返回对应类型的默认值 fmt.Println(m1["不存在的key"]) //遍历map的key和value m2 := make(map[string]string, 10) m2["姓名"] = "Martin" m2["性别"] = "男" for k, v := range m2 { fmt.Println(k, v) } //仅遍历map的keys for k := range m2 { fmt.Println(k) } //仅遍历map的values for _, v := range m2 { fmt.Println(v) } //删除map中的key delete(m2,"姓名") fmt.Println(m2) //删除map中不存在的key() no-option delete(m1,"不存在的key") /* go doc builtin.delete 查看内置函数的用法 func delete(m map[Type]Type1, key Type) The delete built-in function deletes the element with the specified key (m[key]) from the map. If m is nil or there is no such element, delete is a no-op. */ }
排序显示map
无论是Python的字典还是Go中的map,它们都是无序的。那么我们如何对map进行排序呢?就需要1些迂回的方法;
对map的key进行排序做成切片,然后遍历切片中的key逐一获取map中的元素。
package main import ( "fmt" "math/rand" //math包中有个rand模块 "sort" "time" ) func main() { //获取当前时间的 纳秒(随机数字) rand.Seed(time.Now().UnixNano()) //声明1个map存放{stud纳秒:分数 } var scoreMap = make(map[string]int, 200) for i := 0; i < 100; i++ { key := fmt.Sprintf("stud%2d", i) value := rand.Intn(100) //生成0-99的随机整数(作为分数) scoreMap[key] = value } var keys = make([]string, 0, 200) for key := range scoreMap { keys = append(keys, key) } //安装字符串进行排序 sort.Strings(keys) //通过排序后的key,对map逐一获取值 for _, key := range keys { fmt.Println(scoreMap[key]) } }
切片和map组合数据类型
如何在go里面组织这种多维度的数据类型?
[{"key1":"v1"},{"key2":"v2"}]
{"ke1":["v1","v2","v3"] }
以上是关于Go数据类型 map的主要内容,如果未能解决你的问题,请参考以下文章