180课时吃透Go语言游戏后端开发14:map类型

第14课我们来讲讲在Go语言中的map类型,map是一种无序的键值对集合,它类似于其他语言中的字典或哈希表。map非常实用,比如在游戏开发中,你可以用它来存储玩家的属性信息、游戏物品的属性等。
声明和初始化 map
使用make函数初始化
package mainimport ("fmt"
)func main() {// 使用make函数创建一个map,键为string类型,值为int类型scores := make(map[string]int)scores["赵云"] = 92scores["不知火舞"] = 88fmt.Println(scores)
}
将以上代码写入main.go,运行结果如下:
leicw@Code AI世界:code014$ go run main.go
map[不知火舞:88 赵云:92]
在这个例子中,我们使用make函数创建了一个map,键是string类型,值是int类型。然后我们给map中添加了两个键值对,分别是 "赵云": 92和 "不知火舞": 88,最后打印出这个map。
使用字面量初始化
package mainimport ("fmt"
)func main() {// 使用字面量初始化mapcities := map[string]int{"房间1": 15,"房间2": 28,}fmt.Println(cities)
}
将以上代码写入main.go,运行结果如下:
leicw@Code AI世界:code014$ go run main.go
map[房间1:15 房间2:28]
这里通过字面量的方式直接初始化了一个map,包含两个房间的人数。
访问 map 中的值
package mainimport ("fmt"
)func main() {fruits := map[string]int{"苹果": 5,"西瓜": 3,}// 访问存在的键count, ok := fruits["苹果"]if ok {fmt.Printf("map中有%d个苹果\n", count)} else {fmt.Println("该map中没有找到苹果")}// 访问不存在的键count, ok = fruits["香蕉"]if ok {fmt.Printf("map中有%d根香蕉\n", count)} else {fmt.Println("该map中没有找到香蕉")}
}
将以上代码写入main.go,运行结果如下:
leicw@Code AI世界:code014$ go run main.go
map中有5个苹果
该map中没有找到香蕉
在这个例子中,我们首先检查map中是否存在 "苹果" 这个键,如果存在就打印苹果的数量。然后检查是否存在 "香蕉" 这个键,由于不存在,所以打印提示信息。通过这种方式可以避免在访问不存在的键时出现运行时错误。
删除 map 中的键值对
package mainimport ("fmt"
)func main() {animals := map[string]int{"小狗": 2,"小猫": 3,"小鸟": 5,}fmt.Println("删除前:", animals)// 删除键为"cat"的键值对delete(animals, "小猫")fmt.Println("删除后:", animals)
}
将以上代码写入main.go,运行结果如下:
leicw@Code AI世界:code014$ go run main.go
删除前: map[小狗:2 小猫:3 小鸟:5]
删除后: map[小狗:2 小鸟:5]
这里使用delete函数删除了map中键为 "小猫" 的键值对,然后打印出删除前后map的内容,展示了删除操作的效果。
遍历 map
package mainimport ("fmt"
)func main() {numbers := map[string]int{"一": 1,"二": 2,"三": 3,}// 遍历mapfor key, value := range numbers {fmt.Printf("%s: %d\n", key, value)}
}
将以上代码写入main.go,运行结果如下:
leicw@Code AI世界:code014$ go run main.go
一: 1
二: 2
三: 3
leicw@Code AI世界:code014$ go run main.go
二: 2
三: 3
一: 1
在这个例子中,通过for... range循环遍历了map,并打印出每个键值对。需要注意的是,map是无序的,每次遍历的顺序可能不同。
map 作为函数参数
package mainimport ("fmt"
)// 向map中添加键值对的函数
func addToMap(m map[string]int, key string, value int) {m[key] = value
}func main() {data := make(map[string]int)addToMap(data, "年龄", 18)fmt.Println(data)
}
将以上代码写入main.go,运行结果如下:
leicw@Code AI世界:code014$ go run main.go
map[年龄:18]
这里定义了一个函数addToMap,它接受一个map作为参数,并向其中添加一个键值对。在main函数中,我们创建了一个空的map,然后调用addToMap函数向其中添加数据,最后打印出map的内容。这展示了map作为函数参数时的使用方式。
希望这些丰富的例子能帮助你深入理解Go语言中的map类型,你可以在实际的游戏开发中灵活运用它来解决各种问题,如果还有疑问,欢迎评论区留言。
每一次点赞,都是你无声的鼓励。每一次关注,都是我前行的动力。感谢有你,一起成长!
推荐阅读
- 零基础打造射击游戏《太空大战》1
- 180课时吃透Go语言游戏后端开发8:数组与切片的进阶用法
- 180课时吃透Go语言游戏后端开发国庆特别篇:270行代码制作烟花秀
