Go语言之集合(Map)

2020-05-29  本文已影响0人  测试探索

map是Go中的内置类型,它将一个值与一个键关联起来,可以使用响应的键检索值
Map是一种无序的键值对的集合,Map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值

一:注意事项
二:获取

value,ok := map[key]
根据key获取对应的value,如果key存在,value就是对应的数据,ok为true,如果key不要存在,value就是值类型的默认值,ok为false

三: 删除

如果key存在,直接删除数据,如果key不存在,删除失败

package main

import "fmt"

func main() {
    //1.创建map
    //只是声明,没有初始化,nil,如果不初始化map,那么就会创建一个nil map,nil map不能用来存放键值对
    var map1 map[int]string
    var map2 = make(map [int] string)
    var map3 = map[string] int {"Go":98,"Python":87,"java":79,"html":93}
    fmt.Println("map1",map1)
    fmt.Println("map2",map2)
    fmt.Println("map3",map3)

//  nil map
//  判断是否是nil
    fmt.Println("map1是否是nil:",map1 == nil)
    fmt.Println("map2是否是nil:",map2 == nil)
    fmt.Println("map3是否是nil:",map3 == nil)

//  3.存储键值对到map中
//  map[1]key = value
    map2[1] = "hello"
    map2[2] = "world"
    map2[3] = "王二狗"
    map2[4] = "rudy"
    map2[5] = "好好好"
    map2[6] = ""

//  获取数据
    fmt.Println("map2[4]的值是:",map2[4])
    fmt.Println("map2[40]的值是:",map2[40])

    v1,ok := map1[40]
    if ok {
        fmt.Println("map1[40]对应的数值是:",v1)
    } else {
        fmt.Println("map1[40]操作的key不存在,获取到的是零值")
    }

//  删除数据
    delete(map2,3)
    fmt.Println(map2)

}
//结果
map1 map[]
map2 map[]
map3 map[Go:98 Python:87 html:93 java:79]
map1是否是nil: true
map2是否是nil: false
map3是否是nil: false
map2[4]的值是: rudy
map2[40]的值是: 
map1[40]操作的key不存在,获取到的是零值
map[1:hello 2:world 4:rudy 5:好好好 6:]

三、遍历Map
package main

import (
    "fmt"
    "sort"
)

func main() {
    map1 := make(map [int] string )

    map1[5] = "hello"
    map1[6] = "world"
    map1[7] = "王二狗"
    map1[8] = "rudy"
    map1[9] = "好好好"

    for i,v := range map1 {
        fmt.Println(i,v)
    }

    fmt.Println("--------------------")
    for i:= 1;i<=len(map1);i++{
        fmt.Println(i,"--->",map1[i])
    }

    /*
    第二种方式
    1.获取所有的key--》切片/数组
    2.进行排序
    3.遍历key --》map[key]
     */
    keys := make([] int,0,len(map1))  //定义一个keys容量是map1的长度
    fmt.Println("one_keys ",keys)

    for k,_ := range map1{
        keys = append(keys,k)
    }
    fmt.Println("for_keys: ",keys)

//  排序
    sort.Ints(keys)
    fmt.Println(keys)
//  遍历key
    for _,key := range keys{
        fmt.Println(key,map1[key])
    }

}

上一篇下一篇

猜你喜欢

热点阅读