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 main
import "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 main
import "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[]的键值对个数 0
map1: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 main
import "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=0
var2=0 ok=false
var3=1 ok=true
ok=true
删除数据
应用内置函数 delete
删除某个键,即便该键不存在
ch08/deletekey/main.go
package main
import "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 main
import "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
微信公众号:闲渔一下