Go map类型

一、map介绍

1、map说明
  • map是一种无须的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用
  • Go语言中map的定义语法如下:map[KeyType]ValueType
  • 其中
    • KeyType:表示键的类型
    • ValueType:表示键对应的值的类型
    • map类型的变量默认初始值为nil,需要使用make()函数来分配内存
  • 其中cap表示map的容量,该参数虽然不是必须的
  • 注意:获取map的容量不能使用cap,cap返回的是数组切片分配的空间大小,根本不能用于map
  • 要获取map的容量,可以用len函数

2、定义map

1、map定义:方法1
package main

import "fmt"

func main() {
    scoreMap := make(map[string]int,8)
    scoreMap["snail"]=100
    scoreMap["pupu"]=90
    
    fmt.PrintIn(scoreMap)    //map[snail:100 pupu:90]
    fmt.PrintIn(scoreMap["snail"])    //100
    fmt.Printf("type of a:%T\n",scoreMap)    //type of a:map[string]int
}
2、map定义:方法2
package main
import (
	"fmt"
)
func main() {
	userInfo := map[string]string{
		"username": "IT Snail",
		"password": "123456",
	}
	fmt.Println(userInfo)   // map[password:123456 username:IT Snail]
}
3、map 嵌套 map
package main

import "fmt"

func main() {
    var mapSlice = make([]map[string]string,3)
    for index, value := range mapSlice {
        fmt.Printf("index:%d value:%v\n",index,value)

    }
    fmt.PrintIn("################### after init ################")
    mapSlice[0] = make(map[string]string,10)
    mapSlice[0]["name"] = "Snail"
    mapSlice[0]["password"] = "123456"
    mapSlice[0]["address"] = "浦东新区"
    for index, value := range mapSlice {
        fmt.Printf("index:%d,value:%v\n",index,value)
    }
}
/*
index:0 value:map[]
index:1 value:map[]
index:2 value:map[]
#################### after init ################
index:0 value:map[address:海淀区 name:小王子 password:123456]
index:1 value:map[]
index:2 value:map[]
 */

三、map 基本使用

1、判断某个建是否存在
package main 

import "fmt"

func main() {
    userInfo := map[string]string{
        "username":"Snail",
        "password":"123456",
    }
    v,ok := userInfo["username"]
    if ok {
        fmt.PrintIn(v)    //Snail
    }else {
        fmt.PrintIn("map中没有此元素")
    }
}
2、delete()函数
  • 使用的delete()内建函数从 map 中删除一组键值对,delete()函数的格式如下:delete(map对象 key)
  • 其中
    • map 对象:表示要删除键值对的 map 对象
    • key:表示要删除的键值对的键
package main

import "fmt"

func main() {
    scoreMap :=make(map[string]int)
    ScoreMap["pupu"]=90
    ScoreMap["Snail"]=100
    scoreMap["白河车"]= 70
    delete(scoreMap,"Snail")    //将 Snail:100 从 map 中删除
    for k,v := range ScoreMap{
        fmt.PrintIn(k,v)
    }
}
/*
pupu 90
白河车 70
*/

四、map 遍历

1、遍历 key 和 value
package main

import "fmt"

func main() {
    scoreMap :=make(map[string]int)
    ScoreMap["pupu"]=90
    ScoreMap["Snail"]=100
    scoreMap["白河车"]= 70
    for k,v := range ScoreMap{
        fmt.PrintIn(k,v)
    }
}
/*
pupu 90
Snail 100
白河车 70
*/
2、只遍历 key
  • 注意:遍历 map 时的元素顺序余添加键值对的顺序无关
package main

import "fmt"

func main() {
    scoreMap :=make(map[string]int)
    ScoreMap["pupu"]=90
    ScoreMap["Snail"]=100
    scoreMap["白河车"]= 70
    for k,v := range ScoreMap{
        fmt.PrintIn(k)
    }
}
/*
pupu 
Snail 
白河车 
*/
3、顺序遍历 map
package main
import (
	"fmt"
	"sort"
)
func main() {
	// 第一:生成字典,scoreMap
	var scoreMap = make(map[string]int, 200)
	for i := 0; i < 10; i++ {
		key := fmt.Sprintf("stu%02d", i) //生成 stu 开头的字符串
		scoreMap[key] = i
	}
	
	// 第二:取出 map 中的所有 key 存入切片 keys
	var keys = make([]string, 0, 200)
	for key := range scoreMap {
		keys = append(keys, key)
	}

	// 第三:对切片进行排序
	sort.Strings(keys)

	// 第四:按照排序后的 key 遍历 map
	for _, key := range keys {
		fmt.Println(key, scoreMap[key])
	}
}
/*
stu00 0
stu01 1
stu02 2
stu03 3
stu04 4
stu05 5
stu06 6
stu07 7
stu08 8
stu09 9
 */

相关推荐

  1. MIME 类型

    2023-12-05 23:22:05       30 阅读
  2. 19 # 高级类型:索引类型

    2023-12-05 23:22:05       37 阅读
  3. 联合类型和交叉类型

    2023-12-05 23:22:05       31 阅读
  4. 数据库-列的类型-Enum类型和set类型

    2023-12-05 23:22:05       46 阅读
  5. TS条件类型、断言及名义类型

    2023-12-05 23:22:05       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-05 23:22:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-05 23:22:05       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-05 23:22:05       82 阅读
  4. Python语言-面向对象

    2023-12-05 23:22:05       91 阅读

热门阅读

  1. error转string

    2023-12-05 23:22:05       51 阅读
  2. SpringMVC消息转换器 对日期类型进行统一格式化

    2023-12-05 23:22:05       51 阅读
  3. Golang WebSocket 心跳

    2023-12-05 23:22:05       58 阅读
  4. 在Spring Boot中配置@Async的线程池的拒绝策略

    2023-12-05 23:22:05       56 阅读
  5. Spring Boot 最核心的 25 个注解

    2023-12-05 23:22:05       49 阅读
  6. Cpp之旅(学习笔记)第10章 字符串和正则表达式

    2023-12-05 23:22:05       47 阅读
  7. 说说过量 tcp pure ack 的利弊

    2023-12-05 23:22:05       55 阅读
  8. React 基础使用

    2023-12-05 23:22:05       57 阅读
  9. ElasticSearch之Delete index API

    2023-12-05 23:22:05       67 阅读
  10. SpringBoot学习笔记-实现微服务:匹配系统(中)

    2023-12-05 23:22:05       49 阅读
  11. Python【匹配符号】

    2023-12-05 23:22:05       54 阅读