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
 */

你可能感兴趣的:(golang,开发语言,后端)