首页 > 其他分享 >Go笔记(七):Map

Go笔记(七):Map

时间:2023-04-15 09:23:04浏览次数:44  
标签:Map func string map fmt 笔记 map01 Printf Go

  map是一种key:value键值对的数据结构容器,通过key检索value,是引用类型。map内部实现是哈希表。

1、Map的声明

1.1、显示声明

1、语法

/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type

  map_variable:map变量名称

  key_data_type:key的数据类型

  value_data_type:value的数据类型

2、示例代码

 1 package main
 2 
 3 import "fmt"
 4 
 5 // 方式一:显示声明map
 6 func definemap() {
 7    // map01  key: string;value:string
 8    var map01 map[string]string
 9    fmt.Printf("map01: %v\n", map01)
10 
11    // map01  key: string;value:int
12    var map02 map[string]int
13    fmt.Printf("map02: %v\n", map02)
14 }
15 
16 func main() {
17    definemap()
18 }

执行结果如下:

 

1.2、make创建

1、语法

/* 使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)

2、示例代码

 1 package main
 2 
 3 import "fmt"
 4 
 5 // 方式二:make创建map
 6 func makemap() {
 7    map01 := make(map[int]int)
 8    fmt.Printf("map01: %v\n", map01)
 9 }
10 
11 func main() {
12    makemap()
13 }

执行结果如下:

  

2、map初始化

1、两种初始化方式

 1 package main
 2 
 3 import "fmt"
 4 
 5 // 初始化方式一
 6 func initmap01() {
 7    // 创建map,并分配内存
 8    var map01 = make(map[string]string)
 9    map01["name"] = "tom"
10    map01["age"] = "18"
11    fmt.Printf("map01: %v\n", map01)
12 }
13 
14 // 初始化方式二
15 func initmap02() {
16    // 创建map,并分配内存
17    map01 := map[string]string{
18       "name": "zs",
19       "age": "18",
20    }
21    fmt.Printf("map01: %v\n", map01)
22 }
23 
24 func main() {
25    initmap01()
26    initmap02()
27 }

执行结果如下:

  

2、初始化注意事项

  仅显示声明的map是nil,未分配内存的map无法使用。示例代码如下:

 1 package main
 2 
 3 import "fmt"
 4 
 5 // 错误初始化方式,只声明了引用类型的变量,未分配内存,执行失败
 6 func initmap() {
 7    var map01 map[string]string
 8    map01["1"] = "tom"
 9    map01["2"] = "jack"
10    map01["3"] = "timi"
11    fmt.Printf("map01: %v\n", map01)
12 }
13 
14 func main() {
15    initmap()
16 }

  执行结果如下:

 

3、空map判断

  map为空的判断使用nil,示例代码如下:

 1 package main
 2 
 3 import "fmt"
 4 
 5 // 空map判断
 6 func emptymap() {
 7    var map01 map[string]string
 8    if map01 == nil {
 9       fmt.Printf("map01 ==> 是空map\n")
10    }else {
11       fmt.Printf("map01 ==> 是非空map\n")
12    }
13 
14    var map02 = make(map[string]string)
15    if map02 == nil {
16       fmt.Printf("map02 ==> 是空map\n")
17    }else {
18       fmt.Printf("map02 ==> 是非空map\n")
19    }
20 }
21 
22 func main() {
23    emptymap()
24 }

  执行结果如下:  

  

  通过make函数创建的map,分配了内存,map的引用不为空。 

4、操作map

4.1、访问map

1、判断某个key是否存在

  语法如下:

value, ok := map[key]

  示例代码如下:

 1 package main
 2 
 3 import "fmt"
 4 
 5 // 判断某个key在map中是否存在
 6 func existsKey() {
 7    map01 := map[string]string{
 8       "name": "zs",
 9       "age": "18",
10    }
11    var key1 = "name"
12    var key2 = "age"
13    var key3 = "sy"
14    v, ok := map01[key1]
15    fmt.Printf("value: %v\n", v)
16    fmt.Printf("isExist: %v\n", ok)
17    fmt.Println("---------------")
18    v, ok = map01[key2]
19    fmt.Printf("value: %v\n", v)
20    fmt.Printf("isExist: %v\n", ok)
21    fmt.Println("---------------")
22    v, ok = map01[key3]
23    fmt.Printf("value: %v\n", v)
24    fmt.Printf("isExist: %v\n", ok)
25    fmt.Println("---------------")
26 }
27 
28 func main() {
29    existsKey()
30 }

  执行结果如下:

 

2、通过指定的key访问map

 1 package main
 2 
 3 import "fmt"
 4 
 5 // 通过key访问map集合
 6 func visitmapByKey() {
 7    map01 := map[string]string{
 8       "name": "zs",
 9        "age": "18",
10    }
11    var key = "age"
12    fmt.Printf("map01[%v]: %v\n", key, map01[key])
13 }
14 
15 func main() {
16    visitmapByKey()
17 }

  执行结果如下:

3、遍历map

  使用for range遍历map

 1 package main
 2 
 3 import "fmt"
 4 
 5 // map遍历
 6 func visitmap() {
 7    map01 := map[string]string{
 8       "name": "zs",
 9       "age": "18",
10    }
11    // 遍历key
12    for k := range map01 {
13       fmt.Printf("key: %v\n", k)
14    }
15    fmt.Println("-------------------------")
16    // 遍历key、value
17    for k, v := range map01 {
18       fmt.Printf("key: %v, value: %v\n", k, v)
19    }
20    fmt.Println("-------------------------")
21    // 遍历value
22    for _, v := range map01 {
23       fmt.Printf("value: %v\n", v)
24    }
25 }
26 
27 func main() {
28    visitmap()
29 }

  执行结果如下:

 

4.2、删除元素

  删除map中的元素使用delete函数:

delete(map, key)

  示例代码如下:

 1 package main
 2 
 3 import "fmt"
 4 
 5 // map - 删除元素
 6 func delEleMap() {
 7    map01 := map[string]string{
 8       "name": "zs",
 9       "age": "18",
10    }
11    fmt.Printf("map01: %v\n", map01)
12    delete(map01, "name")
13    fmt.Printf("map01: %v\n", map01)
14 }
15 
16 func main() {
17    delEleMap()
18 }

  执行结果如下:

 

4.3、添加修改元素

 1 package main
 2 
 3 import "fmt"
 4 
 5 // 添加修改元素
 6 func addAndUpdEleMap() {
 7    map01 := make(map[string]int)
 8    map01["zs"] = 18
 9    map01["ls"] = 20
10    map01["ws"] = 12
11    fmt.Printf("map01: %v\n", map01)
12    map01["zs"] = 25
13    fmt.Printf("map01: %v\n", map01)
14 }
15 
16 func main() {
17    addAndUpdEleMap()
18 }

  执行结果如下:

 

 

 

标签:Map,func,string,map,fmt,笔记,map01,Printf,Go
From: https://www.cnblogs.com/RunningSnails/p/17320496.html

相关文章

  • 【学习笔记】LGV引理
    令$w(P)$表示路径$P$的所有边权之积,\(e(u,v)\)表示所有\(u\)到\(v\)的路径\(w(P)\)之和,令:\[M=\begin{bmatrix}e(A_1,B_1)\quade(A_1,B_2)\quad...\quade(A_1,B_n)\\e(A_2,B_1)\quade(A_2,B_2)\quad...\quade(A_2,B_n)\\...\\e(A_n,B_1)\......
  • 0008容器之unordered_multimap
    #include<list>#include<iostream>#include<vector>#include<stdexcept>#include<string>#include<cstdlib>//abort()#include<cstdio>//snprintf();整数转字符#include<ctime>#include<algorithm>#include<ar......
  • AirNet使用笔记5
    1、DBM“升级工具”,“InstallPosition”之后“UpdatePosition”失败;“ShowLog”提示:/home/cdatc/InstallTK/copyAirNet:errorwhileloadingsharedlibraries:libQtXml.so.4:cannotopensharedobjectfile:Nosuchfileordirectory原因:/usr/lib64下缺少以下3个libQt*......
  • 09 Shading(Texture Mapping)
    1.TextureMapping下图中,不同位置的反射模型是一样的,但是颜色不同,这是因为漫反射系数不同。同样的,一个点应该还存在着很多属性,那么应当如何定义属性。三维图形的表面可以展开为二维平面,这一个二维平面(包含着对应的三维中三角形的属性)便是Texture。如何实行一个好的纹理映射,是......
  • 如何训练个人的ChatGpt4 - tokengo - 博客园 (cnblogs.com)
    如何训练个人的ChatGpt4-tokengo-博客园(cnblogs.com) 如何在自己的计算机上安装类似ChatGPT的个人AI并在没有互联网的情况下运行它本文旨在为任何人安装此软件。最初它有一个视频,伴随着操作方法,但是事情变化很快,我的三次尝试只是推迟了我发表这篇文章。我以后可能会......
  • Go For Web:Golang http 包详解(源码剖析)
    前言:本文作为解决如何通过Golang来编写Web应用这个问题的前瞻,对Golang中的Web基础部分进行一个简单的介绍。目前Go拥有成熟的Http处理包,所以我们去编写一个做任何事情的动态Web程序应该是很轻松的,接下来我们就去学习了解一些关于Web的相关基础,了解一些概念,以及......
  • gorm数据库操作
    前言:Object-RelationlMapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。GORM是golang写的ORM库网址:https://gorm.io/正文:GORM官方支持的数据库类型有:MySQL......
  • mapbox-gl实战教程:加载各种底图技巧2
    接续上篇,本篇继续讲mapbox-gl加载各种底图的技巧。五、矢量切片底图加载矢量切片(vectortiles)是随着mapbox-gl产生的一种地图切片格式,相比于之前的影像/图片格式的切片,矢量切片可以在客户端进行样式设置,当用户觉得地图配色等不满足要求时,只需要在客户端调整配置即可。矢量切片加......
  • 阅读笔记四月第一篇
    一个理想的设计的特征这一章我主要了解了一个理想设计的特征,书中是这样说的: 一个理想的设计的特征是怎样的呢? 他们有一些共同的特征,这里罗列里一些,虽然都是一个一个的点,但你可以以此针对你做出的设计一一对照一下。1)最小的复杂度:你的设计得很容易看懂,很清晰明了,而不是自作......
  • Nacos笔记(二):Nacos的应用
    Nacos官网:https://nacos.io/zh-cn/index.html。1、注册中心1.1、项目搭建创建新项目,项目结构如下:  父项目下有两个子项目nacos-9001、nacos-9002。1、POM依赖父项目POM文件:<parent><groupId>org.springframework.boot</groupId><artifactId......