Go语言Map的使用

Go 语言Map(集合)

Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

定义 Map

可以使用内建函数 make 也可以使用 map 关键字来定义 Map:


声明变量,默认map是nilvar map_name = map[type]type
另外一种使用make创建map_name := make(map[type]type)

如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对

下面实例演示了创建和使用map:

 1 package main
 2
 3 import (
 4     "fmt"
 5 )
 6
 7 func main(){
 8     //创建map
 9     countryCapitalMap := make(map[string]string)
10
11     //插入每个国家对应的首都
12     countryCapitalMap["France"] = "Paris"
13     countryCapitalMap["Italy"] = "Rome"
14     countryCapitalMap["Japan"] = "Tokyo"
15     countryCapitalMap["India"] = "New Delhi"
16
17     //使用key输出map的值
18     fmt.Println("第一种输出的方式")
19     for country := range countryCapitalMap{
20         fmt.Println("Capital of",country,"is",countryCapitalMap[country])
21     }
22
23     //直接输出map的key和值
24     fmt.Println("第二种输出的方式")
25     for k,v := range countryCapitalMap{
26         fmt.Println("Capital of",k,"is",v)
27     }
28
29     //查看元素是否在map中,变量ok会返回true或者false,当查询的key在map中则返回true并且captial会获取到map中的值
30     fmt.Println("***************************************")
31     captial, ok := countryCapitalMap["United States"]
32     if ok{
33         fmt.Println("Capital of",captial,"is",countryCapitalMap[captial])
34     }else{
35         fmt.Println("Capital of United States is not present")
36     }
37 }

以上代码执行返回的结果:

第一种输出的方式
Capital of France is Paris
Capital of Italy is Rome
Capital of Japan is Tokyo
Capital of India is New Delhi
第二种输出的方式
Capital of France is Paris
Capital of Italy is Rome
Capital of Japan is Tokyo
Capital of India is New Delhi
***************************************
Capital of United States is not present

delete() 函数

delete() 函数用于删除集合的元素, 参数为 map 和其对应的 key。实例如下:

package main

import (
    "fmt"
)

func main(){
    //创建map
    countryCapitalMap := map[string] string {"France":"Paris","Italy":"Rome","Japan":"Tokyo","India":"New Delhi"}

    fmt.Println("原始的map")
    for k,v := range countryCapitalMap{
        fmt.Println("Capital of",k,"is",v)
    }

    //删除map中的France中的key和值
    delete(countryCapitalMap,"France")

    fmt.Println("删除后的map")
    for k,v := range countryCapitalMap{
        fmt.Println("Capital of",k,"is",v)
    }
}

以上代码执行返回的结果:

原始的map
Capital of Italy is Rome
Capital of Japan is Tokyo
Capital of India is New Delhi
Capital of France is Paris
删除后的map
Capital of Japan is Tokyo
Capital of India is New Delhi
Capital of Italy is Rome

因为map的特性,排序是无序的,但是,我TMD就想按着map的key的顺序打印怎么搞,往下看!

 1 package main
 2
 3 import (
 4     "fmt"
 5 )
 6
 7 func main(){
 8     //创建map
 9     countryCapitalMap := map[string] string {"France":"Paris","Italy":"Rome","Japan":"Tokyo","India":"New Delhi"}
10     country_array := [] string {"France","Italy","Japan","India"}
11
12     //根据自定义的数组的顺序有序的打印map中的信息
13     for _,country := range country_array{
14         fmt.Printf("Capital %v of  is %v \n",country,countryCapitalMap[country])
15     }
16 }

以上代码执行返回的结果:

Capital France of  is Paris
Capital Italy of  is Rome
Capital Japan of  is Tokyo
Capital India of  is New Delhi 
时间: 2024-11-07 17:00:36

Go语言Map的使用的相关文章

go语言---map

go语言---map https://blog.csdn.net/cyk2396/article/details/78890185 一.map的用法: type PersonDB struct { Id string Name string Address string } fmt.Println("=========Map===========") //map是一堆键值对的未排序集合,在golang中是内置类型,可以直接使用,不像Java需要引入HashMap var personM

Go语言 map遍历

1 遍历顺序 Go语言里的map,是不保证遍历顺序的(这一点很好理解).甚至同样内容的map,两次遍历的顺序,也可能不一样.下面是一个例子: m := map[string]int{"a1": 1,"b2": 10,"c3": 2,} for k, v := range m {fmt.Printf("%s=%d;", k, v)} // c3=2;a1=1;b2=10; println() for k, v := range

Go语言 map的实现

Go中的map在底层是用哈希表实现的,你可以在 $GOROOT/src/pkg/runtime/hashmap.goc 找到它的实现. 数据结构 哈希表的数据结构中一些关键的域如下所示: struct Hmap { uint8 B; // 可以容纳2^B个项 uint16 bucketsize; // 每个桶的大小 byte *buckets; // 2^B个Buckets的数组 byte *oldbuckets; // 前一个buckets,只有当正在扩容时才不为空 }; 上面给出的结构体只是

【转】GO语言map类型interface{}转换踩坑小记

原文:https://www.az1314.cn/art/69 ------------------------------------------ mapA := make([string]interface{}) mapB := make([string]interface{}) mapA["name"] = "小文" mapA["age"]  = 25 mapB["mapA"] = mapA for k, v := ra

【Go语言】map在goroutine通信中的使用

简介 本篇文章的主要内容是解决go语言map在使用中遇到的两个问题 一.cannot assign to struct field https://haobook.readthedocs.io/zh_CN/latest/periodical/201611/zhangan.html 二.fatal error:concurrent map read and map write https://blog.csdn.net/skh2015java/article/details/60334091 原文

go语言基础教程

Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本.现在Go的开发已经是完全开放的,并且拥有一个活跃的社区. Go 语言环境安装 Go 语言支持以下系统: Linux FreeBSD Mac OS X(也称为 Darwin)

【GoLang笔记】遍历map时的key随机化问题及解决方法

之前的一篇笔记曾分析过,Go的map在底层是用hashmap实现的.由于高效的hash函数肯定不是对key做顺序散列的,所以,与其它语言实现的hashmap类似,在使用Go语言map过程中,key-value的插入顺序与遍历map时key的访问顺序是不相同的.熟悉hashmap的同学对这个情况应该非常清楚. 所以,本文要提到的肯定不是这个,而是一个比较让人惊奇的情况,下面开始说明. 1. 通过range遍历map时,key的顺序被随机化 在golang 1.4版本中,借助关键字range对Go语

Go语言开发(三)、Go语言内置容器

Go语言开发(三).Go语言内置容器 一.Go语言数组 1.Go语言数组简介 Go语言提供了数组类型的数据结构.数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,类型可以是任意的原始类型例如×××.字符串或者自定义类型.相对于去声明number0, number1, ..., and number99的变量,使用数组形式numbers[0], numbers[1] ..., numbers[99]更加方便且易于扩展.数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素

15. Go 语言“避坑”与技巧

Go 语言"避坑"与技巧 任何编程语言都不是完美的,Go 语言也是如此.Go 语言的某些特性在使用时如果不注意,也会造成一些错误,我们习惯上将这些造成错误的设计称为"坑". Go 语言的一些设计也具有与其他编程语言不一样的特性,能优雅.简单.高效地解决一些其他语言难以解决的问题. 本章将会对 Go 语言设计上可能发生错误的地方及 Go 语言本身的使用技巧进行总结和归纳. goroutine(Go语言并发)如何使用才更加高效? Go语言原生支持并发是被众人津津乐道的特