Go map相关
map
Go
语言中的map
是一种无序的,基于key-value
的数据解构,在Go
语言中map
是引用类型,因此必须初始化后才能使用。
以下示例将展示如何声明一个map
类型,以及如何简单使用。
需要注意的是map
的cap
可以进行自动扩容,但是我们应该在初始化map
的时候就给好适当的容量以提高性能。
package main
import (
"fmt"
)
func main() {
// 初始化一个map,key为string类型,value为int类型,容量为10组
var m = make(map[string]int,10)
// 进行填充数据
m["first"] = 110
m["second"] = 120
m["last"] = 119
// 取出value
fmt.Println(m["first"]) // 110
}
声明填充
在声明map
时我们就可以对其填充一些数据,这在很多编程语言中都是被允许的,Go
语言中也不例外。
package main
import (
"fmt"
)
func main() {
// 注意,不可指定cap
var userInfo = map[string]string{
"userName":"云崖先生",
"userAge":"18",
"userGender":"male",
}
fmt.Println(userInfo)
// map[userAge:18 userGender:male userName:云崖先生]
}
判断key
Go
语言中有个判断map
中键是否存在的特殊写法,格式如下:
value, ok := map[key]
示例如下:
package main
import (
"fmt"
)
func main() {
// 注意,不可指定cap
var userInfo = map[string]string{
"userName":"云崖先生",
"userAge":"18",
"userGender":"male",
}
value,ok := userInfo["userHobby"]
if ok{
fmt.Println(value)
}else{
fmt.Println("没有该key")
}
fmt.Printf("%v \n",value) // 一堆空格
fmt.Printf("%v \n",ok) // false
}
遍历map
遍历map
时应该使用range
进行遍历,另外由于map
中的数据是无序的,所以遍历的时候也是无序的。
package main
import (
"fmt"
)
func main() {
// 注意,不可指定cap
var userInfo = map[string]string{
"userName":"云崖先生",
"userAge":"18",
"userGender":"male",
}
for key,value := range userInfo{
fmt.Printf("%v-%v \n",key,value)
}
}
当只想遍历key
时,可不指定value
。
顺序遍历
由于map
是无序的,所以如果我们想使用顺序遍历,则需要将key
全部提取到一个slice
中,遍历slice
取出map
中的value
即可。
package main
import(
"fmt"
"sort"
)
func main() {
m := map[string]string{
"k-2": "第二个",
"k-5": "第五个",
"k-1": "第一个",
"k-4": "第四个",
"k-3": "第三个",
}
slice := make([]string,0,5) // 只能用切片,切片才能append
for key := range(m){
slice = append(slice,key)
}
sort.Strings(slice) // 排序
for _,key := range(slice){
fmt.Println(m[key])
}
}
删除元素
使用内建函数delete()
可删除map
中的键值对。
delete(map,key)
示例演示:
package main
import (
"fmt"
)
func main() {
// 注意,不可指定cap
var userInfo = map[string]string{
"userName":"云崖先生",
"userAge":"18",
"userGender":"male",
}
delete(userInfo,"userGender")
fmt.Println(userInfo)
// map[userAge:18 userName:云崖先生]
}
切片的元素是map
切片中的元素可以是map
package main
import (
"fmt"
)
func main() {
m := map[string]string{
"k-2": "第二个",
"k-5": "第五个",
"k-1": "第一个",
"k-4": "第四个",
"k-3": "第三个",
}
slice := make([]map[string]string, 0, 1) // 该切片内部只能存储map
slice = append(slice, m)
fmt.Println(slice[0]["k-1"])
fmt.Println(slice[0]["k-2"])
}
map的value是切片
一个切片也可以作为map
的value
package main
import (
"fmt"
)
func main() {
// 该map的value必须是slice
var sliceMap = make(map[string][]string, 3)
var sliceValue = make([]string, 0, 3)
sliceValue = append(sliceValue,"slice-1","slice-2","slice-3")
sliceMap["first"] = sliceValue
fmt.Println(sliceMap)
// map[first:[slice-1 slice-2 slice-3]]
}
Go map相关的更多相关文章
- Java并发包——线程安全的Map相关类
Java并发包——线程安全的Map相关类 摘要:本文主要学习了Java并发包下线程安全的Map相关的类. 部分内容来自以下博客: https://blog.csdn.net/bill_xiang_/a ...
- 作业13:Map相关知识点(一)
一 Map相关类图 二 Map接口 1 Map接口中的方法 jdk 方法名 简单描述 put(K,V):V 添加value,当Key对应无值,返回null;有值则返回上一个值.(覆盖式,可以反复覆盖前 ...
- 测试必备之Java知识(三)—— 集合、Map相关
集合相关 List.Set.Map的区别 类型 描述 List 允许重复对象,可插入多个null元素,有序 Set 不允许重复对象,只允许一个null元素,无序 Map 不是collection的子接 ...
- Map相关知识总结
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复. Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很 ...
- Map相关问题
<!--加载地图开始--> <!DOCTYPE html><html><head> <meta charset="UTF-8" ...
- Java中Map相关的快速查找算法与唯一性(转载)
原文地址:http://blog.csdn.net/chuyuqing/article/details/19629229 在对<Set和hashCode()>的一篇原创文章写完后,由于对自 ...
- 双列集合Map相关面试题
一.了解Map集合吗?Map集合都有哪些实现 HashMap HashTable LinkedHashMap TreeMap ConcurrentHashMap 二.HashMap和HashTable ...
- Java面试题集(二)list与Map相关知识(1.2)
前言: 在平常的写java程序中,常用除了8种常用数据类型,String对象外,还有集合类,例如ArrayList,HashMap等,这些最常用. 一.List接口 List接口为Collection ...
- Java——Math,Set,List,map相关练习
声明一个Set集合,只能保存Double类型的数据, 保存10个随机100以内的数, 找出最大值和最小值,打印输出. public static void main(String[] args) { ...
随机推荐
- node_第三方包下载文件package.jon详解
配置原因第三方包的体积过大,不方便团队成员之间共享项目源代码共享时剔除node_modules 快速创建 package.json(只能在英文的目录下成功运行) npm init -y npm i 一 ...
- Pytorch原生AMP支持使用方法(1.6版本)
AMP:Automatic mixed precision,自动混合精度,可以在神经网络推理过程中,针对不同的层,采用不同的数据精度进行计算,从而实现节省显存和加快速度的目的. 在Pytorch 1. ...
- 【Maven】Mac操作系统下安装配置maven环境变量
1.下载maven 下载地址:http://maven.apache.org/download.cgi 2.解压设置maven本地地址解压后 我放在 /Users/david/developer/ap ...
- GLSL 着色器程序
除了使用Cg/HSL 着色器程序以外, OpenGL 着色器语言(GLSL)着色器可以直接书写shader. 然而,使用原生的GLSL只推荐作为测试使用,或者你清晰的知道你的目标平台是 Mac OS ...
- Codeforces 1324E Sleeping Schedule DP
题意 给你一个长度为\(n\)的数组\(a\)和3个数字\(h,l和r\).\(t\)初始为0,每次可以使\(t=(t+a_i) \% h\)或者\(t=(t+a_i-1)\%h\),如果这时\(t\ ...
- Mybatis联合查询(一)
Mybatis的简单联合查询操作: 实体类: Employee: package com.test.mybatis; public class Employee { private Integer i ...
- 目标检测中的IOU和CIOU原理讲解以及应用(附测试代码)
上期讲解了目标检测中的三种数据增强的方法,这期我们讲讲目标检测中用来评估对象检测算法的IOU和CIOU的原理应用以及代码实现. 交并比IOU(Intersection over union) 在目标检 ...
- RunTime 启动bat程序
bat文件路径 String cmd= PathUtil.appPath + File.separator + "nginx-1.14.2"+ File.separator +&q ...
- SEDA架构实现
一.SEDA SEDA全称是:stage event driver architecture,中文直译为“分阶段的事件驱动架构”,它旨在结合事件驱动和多线程模式两者的优点,从而做到易扩展,解耦合,高并 ...
- 营销经验总结:如何才能提升h5游戏代入感?
HTML5游戏拥有即点即玩,无需下载,并具备传播性广的特点,这就使得商家看到了无限商机,如何让产品更加深入人心,是游戏推广最为重要的环节.优秀的代入感才是游戏产品宣传的关键,那么有哪些要素的支撑才能确 ...