学习笔记根据 无闻 go语言基础教程 整理
map
- 类似其他语言中的哈希表或字典,以key-value的形式存储数据
- key必须是支持==或!=比较运算的类型,不可以是函数、map或slice
- map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
- map使用make() 创建,支持
:=这种简写方式。 - make([keyType]valueType,cap), cap表示容量,可省略。
- 超出容量时会自动扩容,但尽量提供一个合理的初始值。
- 使用len() 获取元素个数
- 键值对不存在时自动添加,使用delete() 删除某键值对。
- 使用for range对map和slice进行迭代操作
- 示例代码:
package main
import (
"fmt"
"sort"
)
func main() {
test1()
test2()
test3()
test4()
test5()
test6()
test7()
test8()
test9()
test10()
test11()
}
func test1() {
var m map[int]string
m = map[int]string{}
fmt.Println(m)
}
func test2() {
var m map[int]string
m = make(map[int]string)
fmt.Println(m)
}
func test3() {
var m map[int]string = make(map[int]string)
fmt.Println(m)
}
func test4() {
m := make(map[int]string)
fmt.Println(m)
}
func test5() {
m := make(map[int]string)
m[1] = "OK"
a := m[1]
b := m[2]
fmt.Println(m)
fmt.Println(a)
fmt.Println(b)
fmt.Println("------")
delete(m, 1)
fmt.Println(a)
fmt.Println(m[1])
}
func test6() {
var m map[int]map[int]string
m = make(map[int]map[int]string)
m[1] = make(map[int]string)
m[1][1] = "OK"
a := m[1][1]
fmt.Println(a)
fmt.Println("....")
}
func test7() {
var m map[int]map[int]string
m = make(map[int]map[int]string)
a, ok := m[2][1]
fmt.Println(a, ok)
if !ok {
m[2] = make(map[int]string)
}
m[2][1] = "OK"
a, ok = m[2][1]
fmt.Println(a, ok)
}
func test8() {
s1 := []int{1,2,3}
for i,v:=range s1{
fmt.Println(i, v)
}
fmt.Println("----")
m1 := make(map[int]string)
m1[1] = "Hello"
m1[2] = "World"
for k,v:=range m1{
fmt.Println(k, v)
}
}
func test9() {
sm := make([]map[int]string, 2)
for i,v := range sm{
v = make(map[int]string, 1)
v[i] = "OK"
fmt.Println(v)
}
fmt.Println("----")
fmt.Println(sm)
}
func test10() {
sm := make([]map[int]string, 2)
for k := range sm{
sm[k] = make(map[int]string, 1)
sm[k][k] = "OK"
fmt.Println(sm[k])
}
fmt.Println("----")
fmt.Println(sm)
}
func test11() {
m := map[int]string{1:"a", 2:"b", 3:"c", 4:"d", 5:"e"}
s := make([]int,len(m))
i := 0
for k,_ := range m {
s[i] = k
i++
}
sort.Ints(s)
fmt.Println(s)
fmt.Println("----")
for _, v := range s {
fmt.Println(m[v])
}
}