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

  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. struts中的一些问题

    QueryRunner()方法内要传数据源

  2. 百度与谷歌seo优化的差别

    http://www.wocaoseo.com/thread-126-1-1.html 常有朋友问谷歌(google)和百度(baidu)到底有什么区别?我在纠结这个问题该如何回答.如果从公平公正的角 ...

  3. 一张图对比React、Angular、Vue.js

    文章原文地址:https://baijiahao.baidu.com/s?id=1609374985643812253&wfr=spider&for=pc

  4. Oracle-Over()函数高级用法

  5. [ASP.NET Core开发实战]基础篇05 服务器

    什么是服务器 服务器指ASP.NET Core应用运行在操作系统上的载体,也叫Web服务器. Web服务器实现侦听HTTP请求,并以构建HttpContext的对象发送给ASP.NET Core应用. ...

  6. 谁告诉的你们Python是强类型语言!站出来,保证不打你!

    1. 真的能用隐式类型转换作为强弱类型的判断标准吗?   最近有些学员问我,Python到底是强类型语言,还是弱类型语言.我就直接脱口而出:Python是弱类型语言.没想到有一些学员给我了一些文章,有 ...

  7. 8个必备的Python GUI库

    Python GUI 库有很多,下面给大家罗列常用的几种 GUI 库.下面介绍的这些GUI框架,能满足大部分开发人员的需要,你可以根据自己的需求,选择合适的GUI库. 很多人学习python,不知道从 ...

  8. Chrome开发者工具调试详解

    chrome开发者工具最常用的四个功能模块:元素(ELements).控制台(Console).源代码(Sources),网络(Network). 元素(Elements):用于查看或修改HTML元素 ...

  9. 绝世好题(线性dp)

    给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len).   Input 输入文件共2行. 第一行包括一个整数n. 第二行包括n个 ...

  10. Dungeon Master(三维bfs)

    You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...