慢聊Go之Go中的Map|Go主题月
微信codeMaster001,欢迎大家加好友,共同进步、学习!!!!
前言
如果说在学习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的相关操作。
走起来了。。。学习。
Go相关的资料,博主已帮大家整理好,如有需要可加v:codeMaster001,免费赠送