乐趣区

关于go:Go语言学习笔记08map数据类型

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

微信公众号:闲渔一下

退出移动版