Go语言map Go语言基础map用法及示例详解
枫少文 人气:0想了解Go语言基础map用法及示例详解的相关内容吗,枫少文在本文为您仔细讲解Go语言map的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Go语言基础,Go语言map,下面大家一起来学习吧。
概述
- map是基于key-value键值对的无序的集合
- Go语言中的map是引用类型
- 必须初始化才能使用。
语法
声明和初始化
配合make使用,否则是nil
var map[KeyType]ValueType //KeyType:表示键的类型 //ValueType:表示键对应的值的类型 make(map[KeyType]ValueType, [cap]) //cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量 //当你的容量超过时会自动扩充
例子:
//1.声明 var name1 map[int]string //key是int,value是string var name2 map[string]string //key是string,value是string //字面量 names3:=map[int]string{0:"张三",1:"李四"} //2.分配内存 name1 = make(map[int]string, 2) //2:map的容量,当你的容量超过时会自动扩充 name2 = make(map[string]string, 2) //3.赋值 //3.1 通过KeyType赋值 name1[0]="张三" //key:0 value:张三 name1[1]="李四" //key:1 value:李四 name1[2]="王五" //key:2 value:王五 //已经超过了分配的的容量,会自动扩充 name2["A"]="张三" name2["B"]="李四"
读取
根据KeyType来读取
如果keyType存在,就返回那个值,如果不存在,返回类型默认值值
fmt.Println(name1[0]) fmt.Println(name2["B"])
测试map中key值是否存在
通过KeyType来取值时,会返回两个值,一个是vlue,另一个是是否存在的bool
if value, ok := name1[5]; ok { fmt.Println("存在这个值",value) } else { fmt.Println("不存在这个值", value) }
删除
delete(map[int]string,[KeyType])
例子
delete(name1 , 1)
遍历
range
例子:
for key,value:=range name1 { fmt.Printf("key=%d,value=%s\n",key,value) } for key,value:=range name2 { fmt.Printf("key=%s,value=%s\n",key,value) }
总结
- map必须借助make分配内存空间,否则是nil
- 字面量初始化必修保证key是唯一的,否则error
- map传递的是引用,就是说形参会改变实参的值
- 直接对map对象使用[]操作符获得的对象不能直接修改状态
- map中存储指针而不是结构体
示例
package main import "fmt" func main() { //一、声明和初始化【配合make使用,否则是nil】 //1.声明 var name1 map[int]string //key是int,value是string var name2 map[string]string //key是string,value是string //2.分配内存 name1 = make(map[int]string, 2) //2:map的容量,当你的容量超过时会自动扩充 name2 = make(map[string]string, 2) //3.赋值 //3.1 通过KeyType赋值 name1[0] = "张三" //key:0 value:张三 name1[1] = "李四" //key:1 value:李四 name1[2] = "王五" //key:2 value:王五 //已经超过了分配的的容量,会自动扩充 name2["A"] = "张三" name2["B"] = "李四" //二、读取 // 1. 根据KeyType来读取,如果keyType存在,就返回那个值,如果不存在,返回类型默认值值 fmt.Println(name1[0]) fmt.Println(name2["B"]) // 2. 测试map中key值是否存在【通过KeyType来取值时,会返回两个值,一个是vlue,另一个是是否存在的bool】 if value, ok := name1[2]; ok { fmt.Println("存在这个值", value) } else { fmt.Println("不存在这个值", value) } //三、删除 delete(name1, 1) //删除了李四 delete(name2, "C") //没有这个C fmt.Println(name1) fmt.Println(name2) //四、遍历 for key,value:=range name1 { fmt.Printf("key=%d,value=%s\n",key,value) } for key,value:=range name2 { fmt.Printf("key=%s,value=%s\n",key,value) } }
加载全部内容