您的位置 首页 golang

Golang——map

Map无序的、基于key-value的数据结构,内部使用散列表hash实现。
Map是引用类型,声明时是nil,必须初始化才能使用

map[keytype]valuetype

map类型变量默认初始值是nil,需要使用make()函数进行初始化

make(map[keytype]valuetype, [cap])

map声明和初始化

func main() {    //声明    var a map[string]int    fmt.Println(a == nil)    //true    //初始化,容量可以写,建议编程时候加上    a = make(map[string]int, 10)    fmt.Println(a == nil)    //false    // 声明map并初始化    b := map[int]string{        1:"a",        2:"b",    }    fmt.Println(b)           //map[1:a 2:b]}

map使用(添加key-value、删除key、判断是否存在、遍历)

func main() {    var a map[string]int    a = make(map[string]int, 10)        //添加key-value    a["a"] = 1    a["b"] = 2    fmt.Println(a)              // map[a:1 b:2]    fmt.Printf("%#v\n", a)      // map[string]int{"a":1, "b":2}    fmt.Printf("type:%T\n", a)  //map[string]int    //删除key-value    delete(a, "a")    fmt.Println(a)              //map[b:2]    //判断key是否存在    var c = make(map[string]int, 5)    c["a"] = 1    c["b"] = 2    v, ok := c["c"]    fmt.Println(v, ok)      if ok {        fmt.Println("key=c存在,value=", v)    } else {        fmt.Println("key=c不存在")    }    //map遍历,跟添加的key顺序无关    for key, value := range c {        fmt.Println(key, value)    }    //只遍历map中的key    for key := range c {        fmt.Println(key)    }    //只遍历map中的value    for _, value := range c {        fmt.Println(value)    }    //按照固定顺序固定遍历map    var e = make(map[string]int, 100)    for i := 0; i < 50; i++ {        key := fmt.Sprintf("stu%02d", i)        //生成0~99随机整数        value := rand.Intn(100)        e[key] = value    }    fmt.Println(e)    //按照key从小到大的顺序去遍历map    keys := make([]string, 0, 100)    for key := range e {        keys = append(keys, key)    }    //内置函数进行排序    sort.Strings(keys)    for _, key := range keys {        fmt.Println(key, e[key])    }}

元素为map的切片

func main() {    //元素为map的切片    //切片初始化    var a = make([]map[string]int, 5, 10)    fmt.Println(a[0] == nil)         //true    //内部map的初始化    a[0] = make(map[string]int, 5)    a[0]["a"] = 1    fmt.Println(a)                   //[map[a:1] map[] map[] map[] map[]]}

值为切片的map

func main() {    //值为切片的map    var b = make(map[string][]int, 5)    v, ok := b["a"]    if ok {        fmt.Println(v)                } else {        //对切片的初始化        b["a"] = make([]int, 5)        b["a"][0] = 100        b["a"][1] = 200        b["a"][2] = 300        fmt.Println(b)                  //map[a:[100 200 300 0 0]]    }   }

小练习:统计一下每个单词出现次数

func main() {    //统计一下每个单词出现次数,例如 how do you do    str := "how do you do"    fmt.Println(str)            s := strings.Split(str, " ")    fmt.Println(s)    wordCount := make(map[string]int, 10)    for _, eachWord := range s {        fmt.Println(eachWord)        v, ok := wordCount[eachWord]        fmt.Println(v, ok)        if ok {            wordCount[eachWord] += 1        } else {            wordCount[eachWord] = 1        }    }        fmt.Println(wordCount)} 

文章来源:智云一二三科技

文章标题:Golang——map

文章地址:https://www.zhihuclub.com/592.shtml

关于作者: 智云科技

热门文章

网站地图