go map基础知识简单总结

什么是map?

在go中,map是将值(key)和建(value)关联的内置类型,通过相应的键可以获取到值。

声明:

func main() {
	var mapList map[string]int
	//fmt.Println(mapList)
	if mapList == nil {
		fmt.Println(mapList)
	}
}
// 声明 
// key 是 string类型 
// value 是 类型 
// 变量名 mapList 的 map 
// 此时的mapList 是空的,默认值是 nil 

初始化/创建:

// 声明后是无法使用的 
// 添加key-value 会报异常
func main() {
	var mapList map[string]int
	mapList["a"] = 1
	mapList["b"] = 2
	mapList["c"] = 3
	fmt.Println(mapList)
}
// 输出:panic: assignment to entry in nil map
// 需要make去创建该map,也可以理解成初始化
func main() {
	var mapList map[string]int
    if mapList == nil{
        mapList = make(map[string]int)
    }
	mapList["a"] = 1
	mapList["b"] = 2
	mapList["c"] = 3
	fmt.Println(mapList)
}
// 输出:map[a:1 b:2 c:3]
// 测试
func main() {
	var mapList map[string]int
	if mapList == nil{
		mapList = make(map[string]int)
	}
	mapList[""] = 1	// "" 空字符也算一个元素
	mapList[""] = 4	 // 重复会覆盖,上一个
	mapList["a"] = 2 
	mapList["a"] = 5 // 重复会覆盖,上一个
	mapList["c"] = 3 
	fmt.Println(mapList)
}
// 输出:map[:4 a:5 c:3]

创建时初始化

// 声明时初始化
mapListTwo := map[string]int{
    "string":100,
    "":110,
    "go":120,
}
fmt.Println(mapListTwo)

获取元素

// 获取元素
str := mapList["a"]
fmt.Println(str,mapList[""],mapList["66"])
// 输出:5 4 0
// 当获取元素是map不存在拿到的就是value类型的默认值
// 声明时初始化
mapListTwo := map[string]string{
    "string":"100",
    "":"110",
    "go":"120",
}
mapListOne := map[string]int{
    "string":100,
    "":110,
    "go":120,
}
// 获取元素
str := mapListTwo["a"]
if str == "" {
    fmt.Println("str :",str )
}
stri := mapListOne["a"]
if stri == 0 {
    fmt.Println("stri :",stri )
}
// 输出:str : 
// 输出:stri : 0

判断元素是否存在map中

// 判断一个元素是否存在map中
func main()  {
	mapListOne := map[string]int{
		"string":100,
		"":110,
		"go":120,
	}
	// 判断一个元素是否存在map中
	value,ok := mapListOne["string"]
	if ok == true {
		fmt.Println("string : ",value,ok)
	}
	values,oks := mapListOne["java"]
	if oks {
		fmt.Println("java is ture: ",values,oks)
	} else {
		fmt.Println("java is false: ",values,oks)
	}
}
// 输出:
// string is true:  100 true
// java is false:  0 false

遍历map中的所有元素:for range (使用时不能保证每次执行程序获取的元素顺序都相同)

func main()  {
    // 声明&初始化 mapList
	var mapList map[string]int
	mapList = make(map[string]int)
	mapList["string"] = 100
	mapList["java"] = 200
	mapList["go"] = 300
	// 声明初始化 simpleMap
	simpleMap := map[string]string{
		"JSON":"JSON",
		"java":"java",
	}
    // 遍历 map   (key,value,ok|遍历和判断是否存在元素) 
	for key,value := range simpleMap {
		fmt.Printf("simpleMap[%s] = %s \n",key,value)
	}
	for key,value := range mapList {
		fmt.Printf("mapList[%s] = %d \n",key,value)
	}
}
// 输出两次执行结果:
// simpleMap[JSON] = JSON 		simpleMap[JSON] = JSON
// simpleMap[java] = java 		simpleMap[java] = java 
// mapList[string] = 100 		mapList[java] = 200 
// mapList[java] = 200 			mapList[go] = 300
// mapList[go] = 300 			mapList[string] = 100 

删除map中的元素

func main()  {
	//删除map中的元素
	mapList := map[string]int{
		"string":1000,
		"go":2000,
		"map":3000,
	}
	fmt.Println("mapList all ",mapList," length is ",len(mapList))
	delete(mapList,"map")
	fmt.Println("mapList deletion all ",mapList,"length is ",len(mapList))
}
// 输出:
// mapList all  map[go:2000 map:3000 string:1000]  length is  3
// mapList deletion all  map[go:2000 string:1000] length is  2

map 是引用类型,对map元素的改变即在改变这个map,且这个修改是显性的。
map 类型之间不能使用 ==符判断,==是能用来判断该map是否初始化为nil
map声明后必须要初始化才可以使用。
key必须是支持==或!=比较运算的类型(其类型的默认值也可以当作一个key),不可以是函数、map或slice。
使用for range 遍历时是无序的

上一篇:GO:基础数据类型 - 数组


下一篇:1.Go语言快速入门