1 Map
- 类似其它语言中的哈希表或者字典,以key-value形式存储数据
- Key必须是支持==或!=比较运算的类型,不可以是函数、map或slice
- Map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
Map使用make()创建,支持 := 这种简写方式
make([keyType]valueType, cap)
,cap表示容量,可省略
超出容量时会自动扩容,但尽量提供一个合理的初始值
使用len()获取元素个数键值对不存在时自动添加,使用delete()删除某键值对
- 使用 for range 对map和slice进行迭代操作
func main() {
//key类型int,value是string
var m map[int] string
m=map[int]string{}
fmt.Println(m)
}
func main() {
//key类型int,value是string
var m map[int]string
m = make(map[int]string)
fmt.Println(m)
}
func main() {
//key类型int,value是string
var m map[int]string = make(map[int]string)
fmt.Println(m)
}
func main() {
//key类型int,value是string
m := make(map[int]string)
m[1] = "Ok"
a := m[1]
fmt.Println(a)
}
func main() {
//key是int,value是map
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)
}
func main() {
//key是int,value是map
var m map[int]map[int]string
m = make(map[int]map[int]string)
//多返回值,第二个返回值是布尔类型,表明键值对是否存在
a, ok := m[2][1]
fmt.Println(a,ok)
}
func main() {
//key是int,value是map
var m map[int]map[int]string
m = make(map[int]map[int]string)
//多返回值,第二个返回值是布尔类型,表明键值对是否存在
a, ok := m[2][1]
if !ok {
m[2] = make(map[int]string)
}
m[2][1] = "Hello"
a,ok = m[2][1]
fmt.Println(a, ok)
}
2 迭代操作
func main() {
//以map为元素的slice
sm := make([]map[int]string, 5)
//用下划线将索引忽略
// v 只是一份拷贝
for _, v := range sm {
v = make(map[int]string, 1)
v[1]="Ok"
fmt.Println(v)
}
fmt.Println(sm)
}
func main() {
//以map为元素的slice
sm := make([]map[int]string, 5)
//用下划线将索引忽略
// v 只是一份拷贝
for i:= range sm {
sm[i] = make(map[int]string, 1)
sm[i][1]="Ok"
fmt.Println(sm[i])
}
fmt.Println(sm)
}
func main() {
//map 是无序的
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++
}
fmt.Println(s)
}
package main
import (
"sort"
"fmt"
)
func main() {
//map 是无序的
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)
}
func main() {
//map 是无序的
m1 := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}
fmt.Println(m1)
m2:=make(map[string]int)
for k,v:=range m1{
m2[v]=k
}
fmt.Println(m2)
}