08-Maps

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)
posted @ 2019-12-11 22:13  只会玩辅助  阅读(281)  评论(0编辑  收藏  举报