Map
Go Map
Go语言中的map是一个无序的key : vlaue
键值对的数据结构容器,map内部实现是哈希表hash。
map的特点就是类似与Python的字典,,按照key来找到对应的value 。key指向数据的值。
Map的声明
Go语言的map同样是可是使用make来声明的。
var Name [KeyType]ValueType //声明map, 此时声明的map是nil map,不存在初始值
//或者
var Name = make(map[KeyType]ValueType)
//或者
var Name = map[KeyType]ValueType{key:value,key:value} //这种要静态初始化
Name
: 变量名
KeyType
:Key的数据类型
ValueType
: Value的数据类型
Map的初始化
map的初始化和数组类似。
但是要直接var Name [KeyType]ValueType
来声明map会得到一个空(nil map)无法被赋值。
就需要make函数来创建一个非空的map。这样才可以赋值。
package main
import "fmt"
func main() {
var Map map[int]int
Map = make(map[int]int) //make函数来创建一个非空的map,赋值。
for i := 0; i < 5; i++ {
Map[i] = i
}
fmt.Println("Map: ", Map)
}
输出结果:
当然也可以利用这个来做个判断:
package main
import "fmt"
func main() {
var Map = make(map[int]int)
for i := 0; i < 5; i++ {
Map[i] = i
}
Value, err := Map[5]
if err == true { //如果能取到kKey为5的值,err为true,否则为false
fmt.Println("Value: ", Value)
} else {
fmt.Println("不存在该键")
}
fmt.Println("Map: ", Map)
}
遍历Map
可以使用 for range
来遍历map
- 遍历Key
package main
import "fmt"
func main() {
var Map = make(map[string]int)
Map["一"] = 1
Map["二"] = 2
Map["三"] = 3
Map["四"] = 4
Map["五"] = 5
for key := range Map {
// 使用for range 遍历key
fmt.Println(key)
}
}
输出结果:
由于内部实现是哈希值的原因,map不像切片或者数组有序,不存在下标。
- 遍历Value
package main
import "fmt"
func main() {
var Map = make(map[string]int)
Map["一"] = 1
Map["二"] = 2
Map["三"] = 3
Map["四"] = 4
Map["五"] = 5
for _, value := range Map { //稍微修改以下即可,key直接用匿名变量
fmt.Println(value)
}
}
输出结果:
- 遍历Key,Value
package main
import "fmt"
func main() {
var Map = make(map[string]int)
Map["一"] = 1
Map["二"] = 2
Map["三"] = 3
Map["四"] = 4
Map["五"] = 5
for key, value := range Map {
fmt.Println(key, ": ", value)
}
}
输出结果:
删除元素
elete() 函数用于删除集合的元素, 参数为 map 和其对应的 key。
package main
import "fmt"
func main() {
var Map = make(map[int]int)
for i := 0; i < 5; i++ {
Map[i] = i
}
delete(Map, 0) //删除key 为 0的元素
delete(Map, 1)//删除key 为 1的元素
delete(Map, 2)//删除key 为 2的元素
for key, value := range Map {
fmt.Println(key, ": ", value) //遍历输出
}
}
输出结果:
其他
不知道是不是个例,我如果把map类型改为 [int]int , 然后遍历key或者value会报错。报错原因是因为window安全中心检测到了病毒。这时候要把实时检测关掉来运行程序,或者卸载Goland重装一遍。