map

1.map创建

  • map也就是Python中字典的概念,它的格式为map[keyType]valueType

  • map的读取和设置也类似slice一样,通过key来操作,只是sliceindex只能是`int`类型,而map多了很多类型,可以是int,可以是string及所有完全定义了==!=操作的类型。
  • 创建前必须进行变量声明
//声明一个key是字符串,值为int的字典,这种方式的声明需要在使用之前使用make初始化
var numbers map[string]int
// 另一种map的声明方式
numbers := make(map[string]int)
numbers["one"] = 1  //赋值
numbers["ten"] = 10 //赋值
numbers["three"] = 3

fmt.Println("第三个数字是: ", numbers["three"]) // 读取数据
// 打印出来如:第三个数字是: 3
  • make方式创建
type PersonInfo struct{
    ID string
    Name string
    Address string
}
//变量声明
var myMap map[string] PersonInfo
// 再使用make函数创建一个非nil的map,nil map不能赋值
myMap = make(map[string] PersonInfo)
//指定其初始存储能力
myMap = make(map[string] PersonInfo, 100)

//创建并初始化map
myMap := map[string] PersonInfo{
    "1234": PersonInfo{"1", "Jack", "Room 101..."} 
}

2.删除元素

  • 通过delete删除map的元素:
  • map有两个返回值,第二个返回值,如果不存在key,那么ok为false,如果存在ok为true
// 初始化一个字典
rating := map[string]float32{"C":5, "Go":4.5, "Python":4.5, "C++":2 }
// map有两个返回值,第二个返回值,如果不存在key,那么ok为false,如果存在ok为true
csharpRating, ok := rating["C#"]
if ok {
	fmt.Println("C# is in the map and its rating is ", csharpRating)
} else {
	fmt.Println("We have no rating associated with C# in the map")
}

delete(rating, "C")  // 删除key为C的元素

3.map是引用类型

  • map也是一种引用类型,如果两个map同时指向一个底层,那么一个改变,另一个也相应的改变:
m := make(map[string]string)
m["Hello"] = "Bonjour"
m1 := m
m1["Hello"] = "Salut"  // 现在m["hello"]的值已经是Salut了

4.元素查找

value, ok := myMap["1234"]
if ok{//找到了
    //处理找到了的value
}

5.map注意点

  • map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须通过key获取
  • map的长度是不固定的,也就是和slice一样,也是一种引用类型
  • 内置的len函数同样适用于map,返回map拥有的key的数量
  • map的值可以很方便的修改,通过numbers["one"]=11可以很容易的把key为one的字典值改为11
  • map和其他基本型别不同,它不是thread-safe,在多个go-routine存取时,必须使用mutex lock机制map的初始化可以通过key:val的方式初始化值,同时map内置有判断是否存在key的方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值