Maps
map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。Maps类似于python中的字典
Maps定义
maps的key值必须是可hash(就是不可变类型:字符串,数字...)(Map是无序的)
maps创建语句: var a map[键值类型]value值类型 package main import "fmt" func main() { var a map[int]string #key是int,value是string fmt.Println(a) } #结果 map[] #map的空值是nil类型
maps的初始化赋值和取值
package main import "fmt" func main() { var b map[int]int=make(map[int]int) #使用map初始化 b[1]=100 #往b里面设置值,key value形式 b[2]=50 fmt.Println(b) fmt.Println(b[1]) #获取key为1的value值 } #结果 map[1:100 2:50] 100
取一个不存在的key值会怎么样?(会返回value值的空值)
package main import "fmt" func main() { var b map[int]int=make(map[int]int) b[1]=100 b[2]=50 fmt.Println(b[5]) #去key值为5的value,取不到。因为value是int类型所以打印0 } #结果 0
我们想知道map中到底是不是存在这个key,可以通过判断ok。如果ok是true表示存在该key,key值对应的就是value,反之表示key不存在。
package main import "fmt" func main() { var b map[int]int=make(map[int]int) b[1]=100 b[2]=50 fmt.Println(b) fmt.Println(b[1]) #100 fmt.Println(b[5]) #0 v,ok:=b[1] if ok==true { #判断 fmt.Println(v) #100 } }
定义和初始化的第二种方式
package main import "fmt" func main() { var a=map[int]string{1:"10",2:"20"} #key,value形式初始化值 fmt.Println(a[1]) #10 } #结果 10
删除map中的元素
删除 map
中 key
的语法是 [delete(map, key)]。这个函数没有返回值。
package main import "fmt" func main() { var a =map[int]string{1:"10",2:"100"} delete(a,2) #只能删存在的key delete(a,3) #没有这个key就删不了 fmt.Println(a) } #结果 map[1:10]
获取map的长度
package main import "fmt" func main() { var a =map[int]string{1:"10",2:"100"} fmt.Println(len(a)) } #结果 2
Map是引用类型
map 也是引用类型。当 map 被赋值为一个新变量的时候,它们指向同一个内部数据结构。因此,改变其中一个变量,就会影响到另一变量。
package main import "fmt" func main() { var a =map[int]string{1:"10",2:"100"} test2(a) fmt.Println(a) } func test2(a map[int]string) { a[1]="20" #修改test1中的a会影响到原本的a fmt.Println(a) } #结果 map[1:20 2:100] map[1:20 2:100]
Map的相等性
map 之间不能使用 ==
操作符判断,==
只能用来检查 map 是否为 nil
。
判断两个 map 是否相等的方法是遍历比较两个 map 中的每个元素
Map循环出所有元素
方法一:用for循环的方式,这种方式不提倡
var a =map[int]string{1:"10",0:"100",10:"999"} for i:=0;i<len(a);i++{ fmt.Println(a[i]) }
方法二:用for 和range的方式
var a =map[int]string{1:"10",0:"100",10:"999"}
for k,v:=range a{ fmt.Println(k) fmt.Println(v) }
补充:切片删除元素
根据索引来截取,然后放入一个新数组中
var a =[]int{1,2,3,4,5,6} a=append(a[0:2],a[3:]...) fmt.Println(a)