map

   Go语言中的map是一种无序的,基于key-value的数据解构,在Go语言中map是引用类型,因此必须初始化后才能使用。

   以下示例将展示如何声明一个map类型,以及如何简单使用。

   需要注意的是mapcap可以进行自动扩容,但是我们应该在初始化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是切片

   一个切片也可以作为mapvalue

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相关的更多相关文章

  1. Java并发包——线程安全的Map相关类

    Java并发包——线程安全的Map相关类 摘要:本文主要学习了Java并发包下线程安全的Map相关的类. 部分内容来自以下博客: https://blog.csdn.net/bill_xiang_/a ...

  2. 作业13:Map相关知识点(一)

    一 Map相关类图 二 Map接口 1 Map接口中的方法 jdk 方法名 简单描述 put(K,V):V 添加value,当Key对应无值,返回null;有值则返回上一个值.(覆盖式,可以反复覆盖前 ...

  3. 测试必备之Java知识(三)—— 集合、Map相关

    集合相关 List.Set.Map的区别 类型 描述 List 允许重复对象,可插入多个null元素,有序 Set 不允许重复对象,只允许一个null元素,无序 Map 不是collection的子接 ...

  4. Map相关知识总结

    Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复. Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很 ...

  5. Map相关问题

    <!--加载地图开始--> <!DOCTYPE html><html><head> <meta charset="UTF-8" ...

  6. Java中Map相关的快速查找算法与唯一性(转载)

    原文地址:http://blog.csdn.net/chuyuqing/article/details/19629229 在对<Set和hashCode()>的一篇原创文章写完后,由于对自 ...

  7. 双列集合Map相关面试题

    一.了解Map集合吗?Map集合都有哪些实现 HashMap HashTable LinkedHashMap TreeMap ConcurrentHashMap 二.HashMap和HashTable ...

  8. Java面试题集(二)list与Map相关知识(1.2)

    前言: 在平常的写java程序中,常用除了8种常用数据类型,String对象外,还有集合类,例如ArrayList,HashMap等,这些最常用. 一.List接口 List接口为Collection ...

  9. Java——Math,Set,List,map相关练习

    声明一个Set集合,只能保存Double类型的数据, 保存10个随机100以内的数, 找出最大值和最小值,打印输出. public static void main(String[] args) { ...

随机推荐

  1. node_第三方包下载文件package.jon详解

    配置原因第三方包的体积过大,不方便团队成员之间共享项目源代码共享时剔除node_modules 快速创建 package.json(只能在英文的目录下成功运行) npm init -y npm i 一 ...

  2. Pytorch原生AMP支持使用方法(1.6版本)

    AMP:Automatic mixed precision,自动混合精度,可以在神经网络推理过程中,针对不同的层,采用不同的数据精度进行计算,从而实现节省显存和加快速度的目的. 在Pytorch 1. ...

  3. 【Maven】Mac操作系统下安装配置maven环境变量

    1.下载maven 下载地址:http://maven.apache.org/download.cgi 2.解压设置maven本地地址解压后 我放在 /Users/david/developer/ap ...

  4. GLSL 着色器程序

    除了使用Cg/HSL 着色器程序以外, OpenGL 着色器语言(GLSL)着色器可以直接书写shader. 然而,使用原生的GLSL只推荐作为测试使用,或者你清晰的知道你的目标平台是 Mac OS ...

  5. 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\ ...

  6. Mybatis联合查询(一)

    Mybatis的简单联合查询操作: 实体类: Employee: package com.test.mybatis; public class Employee { private Integer i ...

  7. 目标检测中的IOU和CIOU原理讲解以及应用(附测试代码)

    上期讲解了目标检测中的三种数据增强的方法,这期我们讲讲目标检测中用来评估对象检测算法的IOU和CIOU的原理应用以及代码实现. 交并比IOU(Intersection over union) 在目标检 ...

  8. RunTime 启动bat程序

    bat文件路径 String cmd= PathUtil.appPath + File.separator + "nginx-1.14.2"+ File.separator +&q ...

  9. SEDA架构实现

    一.SEDA SEDA全称是:stage event driver architecture,中文直译为“分阶段的事件驱动架构”,它旨在结合事件驱动和多线程模式两者的优点,从而做到易扩展,解耦合,高并 ...

  10. 营销经验总结:如何才能提升h5游戏代入感?

    HTML5游戏拥有即点即玩,无需下载,并具备传播性广的特点,这就使得商家看到了无限商机,如何让产品更加深入人心,是游戏推广最为重要的环节.优秀的代入感才是游戏产品宣传的关键,那么有哪些要素的支撑才能确 ...