go语言---map容器

map容器

  • map以散列表方式存储键值对集合
  • map中每个元素都是键值对
  • map[key]Value map中的key和value类型要和定义时候一致
  • key是操作map的唯一标准,可以通过key对map中的元素进行增/删/改/查
  • key是唯一的,添加已经存在的key会覆盖之前的元素
  • map与数组一样,是值类型,只声明时为空指针(nil)
  • map读写数据时并不是并发安全的,可以结合RWMutex保证并发安全
package main

import "fmt"

func main() {

	declareMap()
	makeMap()
	mapTest1()
	mapTest2()
	loopMap()
}

// 常用的声明map的两种方式
func declareMap() {
	// 声明一个map
	var m map[string]string
	fmt.Println(m)        // map[]
	fmt.Println(m == nil) // true
}

func makeMap() {

	// 使用make函数实例化一个没有初始值的map
	m := make(map[string]string)
	fmt.Println(m)        // map[]
	fmt.Println(m == nil) // false

}

func mapTest1() {
	m := map[string]string{"name": "zhangsan", "age": "22", "gender": "男", "city": "中国上海"}
	m1 := map[string]string{
		"name":   "李四",
		"age":    "31",
		"gender": "男",
		"city":   "中国北京",
	}

	fmt.Println(m)  // map[age:22 city:中国上海 gender:男 name:zhangsan]
	fmt.Println(m1) // map[age:31 city:中国北京 gender:男 name:李四]
}

// 增删改查
func mapTest2() {

	m := map[string]string{
		"张三": "13333333333",
		"李四": "13444444444",
		"王五": "13555555555",
	}
	fmt.Println(m) // map[张三:13333333333 李四:13444444444 王五:13555555555]

	// 查看, 还可以使用两个值去接收,前一个值表示的是获取到key对应的value,后一个值表示的是这个key是否存在
	// 查看一个存在的key
	fmt.Println(m["张三"]) // 13333333333
	v, t := m["张三"]
	fmt.Println(v, t) // 13333333333 true
	// 查看一个不存在的key
	fmt.Println(m["赵六"]) // 空字符串
	v2, t2 := m["赵六"]
	fmt.Println(v2, t2) //   false 前面一个是空字符串

	// 修改
	m["李四"] = "1300000000"
	fmt.Println(m) // map[张三:13333333333 李四:1300000000 王五:13555555555]

	// 新增
	m["田七"] = "13777777777"
	fmt.Println(m) // map[张三:13333333333 李四:1300000000 王五:13555555555 田七:13777777777]

	// 删除 内建函数的delete(map, 元素)
	// 删除一个存在的key
	delete(m, "田七")
	fmt.Println(m) // map[张三:13333333333 李四:1300000000 王五:13555555555]
	// 删除一个不存在的key, 源map不变
	delete(m, "张三丰")
	fmt.Println(m) // map[张三:13333333333 李四:1300000000 王五:13555555555]
}

func loopMap() {
	// 循环遍历map
	m := map[string]string{
		"张三": "13333333333",
		"李四": "13444444444",
		"王五": "13555555555",
	}

	for k, v := range m {
		fmt.Println(k, v)
	}
	/*
		张三 13333333333
		李四 13444444444
		王五 13555555555
	*/
}
发布了22 篇原创文章 · 获赞 1 · 访问量 1847

猜你喜欢

转载自blog.csdn.net/weixin_42677653/article/details/105130959