前言
如果说在学习Java时,最重要的一种数据结构是什么?个人觉得必然会是集合。集合在Java中举足轻重。那么,我们已经熟知了Java中的Map结构,嘿嘿,其实在Go的世界里,仍然存在Map这个数据结构。
今天,我们就来好好学学,了解下呀!
什么是Map
Map是最有用的数据结构之一。它可以存储在键值对中,并且不允许重复的键。
映射是键值对存储容器。提供了快速有效的查找,并且呢,不允许重复的键,而可以有重复的值。
GoLang中声明Map结构
现在,我们来学下Go中如何声明一个Map结构
package main import ( "fmt" ) func main() { var names map[int]string // name map has int keys and string values }
在我们的示例中,键的类型为Int,而值得类型为字符串。
初始化Map
走起,我们来学学如何初始化一个Map结构体。
使用Make()函数
函数make()可以用于初始化地图,如下所示:
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "John" names[1] = "Jane" fmt.Println(names) // map[0:John 1:Jane] }
使用语法
package main import ( "fmt" ) func main() { var names = map[int]string { 0: "John", 1: "Jane", // last comma is a must } fmt.Println(names) // prints map[0:John 1:Jane] }
在GoLang中使用地图
我们可以如同在Java中操作Map结构一样,在Go中,可以在Map插入、删除、查找key。
在地图中插入key
目前,两种方式插入key。初始化时插入key或使用索引语法进行初始化。
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "Freddy" // indexed insertion names[1] = "Shawn" fmt.Println(names) // prints map[0:Freddy 1:Shawn] }
在地图中获取值
我们可以使用索引符号从映射中获取与key相关联的值,如下所示:
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "Freddy" // indexed insertion names[1] = "Shawn" fmt.Println(names[1]) // prints Shawn }
检查key是否存在
当我们尝试获取一个值时,我们得到一个布尔值。这有助于检查key是否存在。
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "Freddy" // indexed insertion names[1] = "Shawn" fred, exists := names[0] if(exists) { fmt.Printf("%s exists", fred) // prints "Freddy exists" } }
Map删除key
我们使用删除功能从Map中删除key。
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "Freddy" // indexed insertion names[1] = "Shawn" names[2] = "Batman" // delete shawn delete(names, 1) fmt.Println(names) // prints map[0:Freddy 2:Batman] }
遍历Map
使用范围,我们可以遍历Map,并同时获得Key和Value
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "Freddy" // indexed insertion names[1] = "Shawn" names[2] = "Batman" names[3] = "Spiderman" names[4] = "Joker" for _, name := range names { fmt.Println(name) } // prints: // Joker // Freddy // Shawn // Batman // Spiderman }
总结
我们从简单来,到简单去,了解Map的相关操作。
走起来了。。。学习。