Go语言学习笔记-08map数据类型
Go语言中的map
,相似于其它语言的映射,字典,哈希表,示意一组无序的键值对
申明
var mapVar map[key_type]value_type
key_type
为键的类型,不能是函数类型,map类型,切片类型
value_type
为值的类型
没有显示初始化的map
类型,默认值为nil
,是无奈应用的,能够通过以下两种形式初始化
申明同时初始化
var map1 = map[key_type]value_type{}
应用make
函数初始化,能够指定容量,但不会受限于初始的容量,map
会在键值对的个数超过以后长度时,会动静扩容
var map1 = make(map[key_type]value_type, 容量)
ch08/main.go
package mainimport "fmt"func main() { var map1 map[string]int // 无奈赋值,map1尚未初始化 //map1["a"] = 1 fmt.Printf("map1 %#v\n", map1) map1 = map[string]int{} map1["a"] = 1 fmt.Printf("map1 %v\n", map1) map2 := make(map[string]int, 5) fmt.Printf("map2 %v", map2)}
输入
map1 map[string]int(nil)map1 map[a:1]map2 map[]
获取键值对个数
应用内置函数len
获取map
的键值对个数
ch08/getlength/main.go
package mainimport "fmt"func main() { map1 := make(map[string]int, 5) fmt.Printf("map1:%v的键值对个数%d\n", map1, len(map1)) map1["a"] = 1 fmt.Printf("map1:%v的键值对个数%d\n", map1, len(map1)) map1["b"] = 2 fmt.Printf("map1:%v的键值对个数%d\n", map1, len(map1))}
输入
map1:map[]的键值对个数0map1:map[a:1]的键值对个数1 map1:map[a:1 b:2]的键值对个数2
读取数据
获取一个不存在的键数据时,返回的是该值数据类型的零值
通过Comma ok
语法格局能够判断是否存在某个键,该模式如下:
v,ok := mapVar[key]
其中ok
是布尔值,存在该key
返回true
,否则返回false
ch08/getvalue/main.go
package mainimport "fmt"func main() { map1 := map[string]int{} // 不存在键a,获取到的值为int的零值 var1 := map1["a"] fmt.Printf("var1=%d\n", var1) // Comma ok var2, ok := map1["a"] fmt.Printf("var2=%d ok=%t\n", var2, ok) map1["a"] = 1 var3, ok := map1["a"] fmt.Printf("var3=%d ok=%t\n", var3, ok) // 若只是想判断是否存在指定键,不关怀值,能够应用空标识符 _, ok = map1["a"] fmt.Printf("ok=%t\n", ok)}
输入
var1=0var2=0 ok=falsevar3=1 ok=trueok=true
删除数据
应用内置函数delete
删除某个键,即便该键不存在
ch08/deletekey/main.go
package mainimport "fmt"func main() { usernameMap := map[string]string{ "1": "闲渔一下", "2": "小明", } fmt.Printf("usernameMap:%v\n", usernameMap) delete(usernameMap, "1") fmt.Printf("usernameMap:%v\n", usernameMap)}
输入
usernameMap:map[1:闲渔一下 2:小明]usernameMap:map[2:小明]
遍历
ch08/rangemap/main.go
package mainimport "fmt"func main() { usernameMap := map[string]string{ "1": "闲渔一下", "2": "小明", } for key, value := range usernameMap { fmt.Printf("key:%s,value:%s\n", key, value) } // 如果只须要键,能够只获取一个值 for key := range usernameMap { fmt.Printf("key:%s\n", key) } // 如果只须要键,能够应用空白标识符疏忽掉第二个值 for key, _ := range usernameMap { fmt.Printf("key:%s\n", key) } // 同样地,如果只须要值,能够应用空白标识符疏忽掉第一个值 for _, value := range usernameMap { fmt.Printf("value:%s\n", value) }}
输入
key:1,value:闲渔一下key:2,value:小明key:1 key:2 key:1 key:2 value:闲渔一下 value:小明
须要留神的是,咱们不能依赖map
的遍历程序,因为map
外面的键值对是无序的
笔记地址
github:https://github.com/xianyuyixi...
交流学习
微信号:xianyuyixia
微信公众号:闲渔一下