开发者社区> 范大脚脚> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

go7---map

简介:
+关注继续查看
复制代码
package main

/*
map
类似其它语言中的哈希表或者字典,以key-value形式存储数据
Key必须是支持==或!=比较运算的类型,不可以是函数、map或slice,
这3中类型都不能实现== != 的运算,value的类型是任意的。
Map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍,可以使用slice或者数组的时候不要使用map.
Map使用make()创建,支持 := 这种简写方式.

make([keyType]valueType, cap),cap表示容量,可省略
超出容量时会自动扩容,但尽量提供一个合理的初始值
使用len()获取元素个数

键值对不存在时自动添加,使用delete()删除某键值对
使用 for range 对map和slice进行迭代操作
*/

import (
    "fmt"
    "sort"
)

func main() {
    var m1 map[int]string
    m1 = map[int]string{}
    fmt.Println(m1) //map[]
    m1 = make(map[int]string)
    fmt.Println(m1) //map[]

    m2 := make(map[int]string)
    fmt.Println(m2) //map[]

    m2[1] = "11"       //存入key-value
    fmt.Println(m2)    //map[1:11]
    fmt.Println(m2[1]) //根据key取值
    m2[2] = "22"
    delete(m2, 1)   //删除map的哪个key
    fmt.Println(m2) //map[2:22]

    var m3 map[string]map[string]string
    m3 = make(map[string]map[string]string) //初始化最外层的map
    m3["1"] = make(map[string]string)       //初始化键为"1"的这个map,
    //如果value是map那么每个map都要单独的初始化make,
    m3["1"]["3"] = "o"
    fmt.Println(m3) //map[1:map[3:o]]
    //如何判断某个key的map是否初始化了
    a, ok := m3["2"]["2"] //:=用于快速不需要指定类型的初始化,=是用于赋值的,
    fmt.Println(a, ok)    //false
    if ok {
    } //检查是否初始化了

    //map的遍历
    slicem := make([]map[int]string, 5) //以map为元素的slice
    for _, v := range slicem {          //遍历slice,   _, v是slice的索引和值,这里不需要索引就忽略了
        v = make(map[int]string, 1) //slice中的map进行初始化
        v[222] = "ddeww"
        fmt.Println(v) //map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww]
    }
    fmt.Println(slicem) //[map[] map[] map[] map[] map[]],v只是一个拷贝,所以原始的map没有改变

    slicem1 := make([]map[int]string, 5) //以map为元素的slice
    for i := range slicem {              //i是索引
        slicem1[i] = make(map[int]string, 1) //slice中的map进行初始化,直接操作而不是对拷贝做操作
        slicem1[i][123] = "ddeww"
        fmt.Println(slicem1[i]) //map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww]
    }
    fmt.Println(slicem1) //[map[123:ddeww] map[123:ddeww] map[123:ddeww] map[123:ddeww] map[123:ddeww]]

    //map的根据key排序
    map3 := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}
    slice3 := make([]int, len(map3))
    i := 0
    for k, _ := range map3 { //忽略value,for range 跟for each差不多
        slice3[i] = k
        i++
    }
    fmt.Println(slice3) //[5 1 2 3 4]
    sort.Ints(slice3)   //sort排序,因为是对整数排序,所以用Ints
    fmt.Println(slice3) //[1 2 3 4 5],最后根据key来排序
}
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/8072960.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Go语言刷题篇】Go从0到入门5:Map综合复习、条件语句、循环语句练习
本期是学习Golang:Map综合复习、条件语句、循环语句练习,有不懂的地方可以评论进行讨论!
0 0
【Go语言刷题篇】Go从0到入门4:切片的高级用法、初级复习与Map入门学习
本期是学习Golang的:切片高级用法及初级复习、Map、条件与循环语句入门学习,有不懂的地方可以评论进行讨论!
0 0
Go基本数据结构的使用:string、slice、map
Go基本数据结构的使用:string、slice、map
0 0
map基本使用及指针问题|Go主题月
map基本使用及指针问题|Go主题月
0 0
go语言map拷贝陷阱、slice更新陷阱
go语言map拷贝陷阱、slice更新陷阱
0 0
go并发访问map的坑 fatal error: concurrent map read and map write
go并发访问map的坑 fatal error: concurrent map read and map write
0 0
go语言map[string]string 转map[string]interface{}
go语言map[string]string 转map[string]interface{}
0 0
GO语言基础教程9——map
map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。
0 0
Go 编程 | 连载 13 - 复杂数据类型 Map
Go 编程 | 连载 13 - 复杂数据类型 Map
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Go 构建日请求千亿级微服务的最佳实践
立即下载
Go语言路上踩过的坑
立即下载
gohbase :HBase go客户端
立即下载