Go的map

map

相当于python中的字典。

一、map的创建

map 在定义时,key(数字和字符串)和value的类型固定了,且key只能用数字和字符串。

1、map的类型

map[key的类型]value的类型

2、定义并初始化

var dic map[int]string  //这样声明只是nil类型

map想要使用需要初始化 
// 方法一:make(map类型)
var dic map[int]string = make(map[int]string)
dic[1] = "donner"

// 方法二:赋值为 map类型+{}
var dic = map[int]string{}
dic[1] = "donner"
 
dic := map[int]string{}
dic[1] = "donner"
fmt.Println(dic)

二、给map添加元素

map[索引] = 值添加元素。

var dic = map[int]string{}
dic[1] = "donner"

三、获取map的元素

获取 map 元素的语法是 map[key]

var dic = map[int]string{1:"a",2:"b",3:"c"}
ele := dic[1]
fmt.Println(ele)  // a
el2 := dic[8]
fmt.Println(el2)  // ""  没有设值的,会取value类型的默认值

从字典中取值,其实会返回两个值,一个是真正的值,一个是true或false。
如果用一个变量来接,就是值;两个变量接,一个是值,一个是true或false。

var dic = map[int]string{1:"a",2:"b",3:"c"}

el3,is_ex := dic[2]
fmt.Println(el3,is_ex)  // b true

el4,is_ex := dic[4]
fmt.Println(el4,is_ex)  // "" false

四、删除map的元素

根据key删除值,语法是 delete(map, key)。这个函数没有返回值。

var dic = map[int]string{1:"a",2:"b",3:"c"}
fmt.Println(dic)  // map[1:a 2:b 3:c]
delete(dic,1)
fmt.Println(dic)  // map[2:b 3:c]

五、获取map的长度

var dic = map[int]string{1:"a",2:"b",3:"c"}
fmt.Println(dic)  // map[1:a 2:b 3:c]
fmt.Println(len(dic))  // 3
dic[4] = "d"
fmt.Println(dic)  // map[1:a 2:b 3:c 4:d]
fmt.Println(len(dic))  // 4

六、map的类型

map是引用类型,修改传参的map也会修改原map。

var dic = map[int]string{1:"a",2:"b",3:"c"}
fmt.Println(dic)  // map[1:a 2:b 3:c]
change_dic(dic)  // map[1:change 2:b 3:c]
fmt.Println(dic)  // map[1:change 2:b 3:c]

func change_dic(d map[int]string)  {
	d[1] = "change"
	fmt.Println(d)
}

七、map的相等性

map 之间不能使用 == 操作符判断,== 只能用来检查 map 是否为 nil

map1 := map[string]int{
    "one": 1,
    "two": 2,
}

map2 := map1

if map1 == map2 {  // 直接划红线报错
}

// invalid operation: map1 == map2 (map can only be compared to nil)

八、循环map

只能用range循环遍历map,不能用i初始化的方式。

var dic = map[int]string{1:"a",2:"b",3:"c",4:"d"}

for k,v:=range dic{
    fmt.Println(k,v)
}

1 a
2 b
3 c
4 d
原文地址:https://www.cnblogs.com/bowendown/p/12595107.html