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

微信公众号:闲渔一下