简介
Map 是一种 无序 的 键值对 的 集合。
可以对其进行迭代,由于是无序的集合,所以遍历时的顺序无法保证。
Map的定义
// 方法一:使用Map关键字来定义
var mapDefinedOne map[int]string
// 方法二:直接初始化
mapDefinedTwo := map[int]string{0:"zero", 1:"one", 2:"two"}
// 方法三: 使用make定义
mapDefinedThree := make(map[int]string)
// 方法四:使用make定义一个容量为5的map, 初始化容量为5,不代表你只可以放5个元素
mapDefinedFour := make(map[int]string, 5)
Map的赋值
方法一:
我们不能直接使用 mapDefinedOne,直接使用会引发panic: assignment to entry in nil map,所以需要初始化
// 定义
var mapDefinedOne map[int]string
// 初始化
mapDefinedOne = make(map[int]string)
// 赋值
mapDefinedOne[0] = "第一个元素"
// 打印
fmt.Println(mapDefinedOne)
输出结果:
方法二:
// 定义
mapDefinedTwo := map[int]string{0:"zero", 1:"one", 2:"two"}
// 也可以继续向map中添加元素
mapDefinedTwo[3] = "three"
// 打印
fmt.Println(mapDefinedTwo)
方法三:
// 使用make定义
mapDefinedThree := make(map[int]string)
// 可以直接赋值
mapDefinedThree[0] = "zero"
// 打印
fmt.Println(mapDefinedThree)
方法四:
// 使用make定义
mapDefinedFour := make(map[int]string, 5)
// 可以直接赋值,虽然我们指定了5个容量, 但是元素数量可以大于5
mapDefinedFour[0] = "zero"
mapDefinedFour[1] = "one"
mapDefinedFour[2] = "two"
mapDefinedFour[3] = "three"
mapDefinedFour[4] = "four"
mapDefinedFour[5] = "five"
// 打印
fmt.Println(mapDefinedFour)
Map值的使用
这里使用第四种方式来做演示
// 使用make定义
mapDefinedFour := make(map[int]string, 5)
// 可以直接赋值
mapDefinedFour[5] = "five"
// 打印
fmt.Println(mapDefinedFour[5])
Map值的更新
// 使用make定义
mapDefinedFour := make(map[int]string, 5)
// 可以直接赋值
mapDefinedFour[5] = "five"
mapDefinedFour[5] = "fiveUpdate"
// 打印
fmt.Println(mapDefinedFour[5])
对元素进行删除,使用内置delete删除元素
delete
delete(map, 键)
删除示例:
// 使用make定义 mapDefinedFour := make(map[int]string, 5) // 可以直接赋值 mapDefinedFour[5] = "five" mapDefinedFour[6] = "fiveUpdate" // 打印 fmt.Println("删除之前的map:", mapDefinedFour) fmt.Println("删除之前的map的键值:", mapDefinedFour[5]) delete(mapDefinedFour, 5) fmt.Println("删除之后的map:", mapDefinedFour) fmt.Printf("删除之后的map的键值:%s", mapDefinedFour[5])
对一个nil map删除元素
// 使用make定义 var mapDefinedOne map[int]string // 也是能删除的, 不会引发panic if mapDefinedOne == nil { delete(mapDefinedOne, 2) fmt.Println("Nil") }
删除一个map中不存在的元素
// 使用make定义 var mapDefinedOne map[int]string mapDefinedOne = make(map[int]string) mapDefinedOne[2] = "two" fmt.Println("mapDefinedOne的值:", mapDefinedOne) // 删除一个不存在的元素 delete(mapDefinedOne, 1) fmt.Println("删除之后mapDefinedOne的值:", mapDefinedOne)
清空一个map
// 使用make定义
var mapDefinedOne map[int]string
mapDefinedOne = make(map[int]string)
mapDefinedOne[2] = "two"
mapDefinedOne[1] = "one"
fmt.Println("mapDefinedOne的值:", mapDefinedOne)
// 对map重新初始化达到清空的目的
mapDefinedOne = make(map[int]string)
fmt.Println("清空之后mapDefinedOne的值:", mapDefinedOne)
获取map的长度, 显示为map的元素的个数
场景一
// 使用make定义 var mapDefinedOne map[int]string mapDefinedOne = map[int]string{0: "zero", 1: "one", 2: "two"} fmt.Println("mapDefinedOne的长度:", len(mapDefinedOne))
场景二
// 使用make定义 var mapDefinedOne map[int]string mapDefinedOne = map[int]string{} fmt.Println("mapDefinedOne的长度:", len(mapDefinedOne))
场景三
// 使用make定义 var mapDefinedOne map[int]string mapDefinedOne = make(map[int]string) fmt.Println("mapDefinedOne的长度:", len(mapDefinedOne))
场景四
// 使用make定义 mapDefinedOne := make(map[int]string, 5) fmt.Println("mapDefinedOne的长度:", len(mapDefinedOne))
map的遍历
// 使用make定义
mapDefinedFour := make(map[int]string, 5)
mapDefinedFour[0] = "zero"
mapDefinedFour[1] = "one"
mapDefinedFour[2] = "two"
mapDefinedFour[3] = "three"
mapDefinedFour[4] = "four"
mapDefinedFour[5] = "five"
fmt.Println("mapDefinedOne的长度:", len(mapDefinedFour))
// map的遍历
for key, value := range mapDefinedFour {
fmt.Println(" key:", key, "value:", value)
}
从结果上来看, map的遍历结果是无序的, 明显和我们写入的顺序是不一致的;
判断一个key是否存在
mapExample := make(map[string]string, 1)
mapExample["key"] = "value"
key := "key2"
// 检查一个key是否存在
value, exist := mapExample[key]
if !exist {
fmt.Println("键: [", key, "]不存在:")
}
key = "key"
value, exist = mapExample[key]
if exist {
fmt.Println("键: [", key, "]存在; 值: [", value, "]")
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。