一、map的创建方式

func main() {
// map创建方式1
// 声明后再make
var stu1 map[int]string
stu1 = make(map[int]string, 2)
fmt.Println(stu1) // map[]
stu1[1] = "哈哈"
fmt.Println(stu1) // map[1:哈哈] // map创建方式2
// 声明时就make
var stu2 = make(map[int]string, 2)
fmt.Println(stu2) // map[]
stu3 := make(map[int]string, 2)
fmt.Println(stu3) // map[] // map创建方式3
// 声明时直接赋值,不需要make
var stu4 = map[int]string{1: "路飞", 2: "佩奇"}
fmt.Println(stu4) // map[1:路飞 2:佩奇] stu5 := map[int]string{1: "妖姬", 2: "瞎子"}
fmt.Println(stu5) // map[1:妖姬 2:瞎子]
}

二、map的增删改查

func main() {
// 增加与修改
stu := make(map[int]string, 2)
stu[1] = "哈哈"
stu[2] = "嘻嘻"
stu[1] = "呵呵"
fmt.Println(stu) // map[1:呵呵 2:嘻嘻]
// 删除
delete(stu, 1)
fmt.Println(stu) // map[2:嘻嘻]
// 如果要删除map的所有key,可以遍历逐个删除,也可以make一个新的map,让原来的成为垃圾,被gc回收
stu = make(map[int]string)
fmt.Println(stu) // map[]
// 查找
s := map[int]string{1: "哈哈", 2: "嘻嘻", 3: "呵呵"}
val, ok := s[1]
if ok {
fmt.Println(val) // 哈哈
} else {
fmt.Println("不存在此key")
}
}

三、map的遍历

func main() {
// map遍历
s := map[int]string{1: "哈哈", 2: "嘻嘻", 3: "呵呵"}
for k, v := range s {
fmt.Printf("k=%d v=%s\n", k, v)
}
// k=1 v=哈哈
// k=2 v=嘻嘻
// k=3 v=呵呵 // 遍历复杂一点的map
stu := make(map[int]map[string]string)
stu[1] = make(map[string]string, 2)
stu[1]["name"] = "妖姬"
stu[1]["gender"] = "女"
stu[2] = make(map[string]string, 2)
stu[2]["name"] = "瞎子"
stu[2]["gender"] = "男"
for k1, v1 := range stu {
fmt.Println(k1)
for k2, v2 := range v1 {
fmt.Printf("k2=%s v2=%s\n", k2, v2)
}
}
// 1
// k2=name v2=妖姬
// k2=gender v2=女
// 2
// k2=name v2=瞎子
// k2=gender v2=男
}

四、map 切片

切片的数据类型如果是map,则我们称为 slice of map,map 切片,这样map个数就可以动态变化了。

func main() {
// map切片示例 // 声明切片
var person []map[string]string
person = make([]map[string]string, 1)
// 增加person
if person[0] == nil {
person[0] = make(map[string]string, 2)
person[0]["name"] = "妖姬"
person[0]["age"] = "18"
}
// 因为切片大小为1,所以不能再使用上面方式增加person(越界)
// 所以可以使用append函数,动态地增加person
p := map[string]string{
"name": "瞎子",
"age": "20",
}
person = append(person, p)
fmt.Println(person) // [map[age:18 name:妖姬] map[age:20 name:瞎子]]
}

五、总结

map的容量满后,再增加元素,会自动扩容,并不会panic,也就是说map能动态地增长键值对;

map的值也经常使用struct类型,更适合管理复杂的数据。

最新文章

  1. 微信企业号开发(1)WebAPI在回调模式中的URL验证
  2. Javascript:谈谈JS的全局变量跟局部变量
  3. ADO.Net 增、删、改、查(基本项)
  4. Swift3.0语言教程字符串与URL的数据转换与自由转换
  5. (Design Pattern) Singleton.
  6. js实现选项卡
  7. 浅谈Android手机木马手工查杀
  8. MS SQL SERVER 中的系统表
  9. Android listview viewpager解决冲突 滑动
  10. android 输入法的打开和关闭
  11. Idea中运行Testng时,报SAXParseException:parallel为none的问题原因及解决
  12. linux_vim_最佳快捷键
  13. 2017qq红包雨最强攻略,
  14. mac 系统安装 eclipse 方法
  15. Android开发Java基础之Java语言基础(1)
  16. Java程序CPU使用率过高
  17. #21 Python异常
  18. 最好用的js前端框架、组件、文档在线预览插件
  19. C#语言不常用语法笔记
  20. Unity接入Steamworks

热门文章

  1. python产生时间
  2. python 学习笔记二 (列表推导式)
  3. [CF1076F] Summer Practice Report
  4. NOI2018D2T1 屠龙勇士
  5. [POI2008]KUP
  6. TCP/IP网络协议基础
  7. get和post中文乱码原理相关博客
  8. Android中集成第三方支付
  9. h5学习-h5嵌入android中
  10. Spark学习笔记--Spark在Windows下的环境搭建(转)