Golang 使用struct作为map键
在Golang中,map作为一种特殊的数据结构,可以用于存储一组键值对(key-value pairs)数据。一般情况下,map的键(key)可以是Golang中的任意一种基本数据类型。但是,在某些特殊情况下,我们也可以使用struct类型作为map的键。
如何定义struct类型
在使用struct类型作为map的键时,我们首先需要定义这个struct类型。Golang中的struct类型定义方式如下:
type Person struct {
name string
age int
}
在上面的代码中,我们定义了一个名为Person的struct类型,并指定了这个struct类型包含两个字段,分别为name和age,类型分别为string和int。
如何定义map类型
在定义了struct类型之后,我们需要使用这个struct类型作为map的键。因此,我们需要定义一个map类型,并将Person类型作为map的键类型。
type Person struct {
name string
age int
}
func main() {
var people map[Person]int
people = make(map[Person]int)
}
在上面的代码中,我们定义了一个名为people的map,将Person类型作为键类型,并将整数类型作为值类型。使用make()函数来初始化map变量,此时这个map为空map。
如何给map添加元素
在我们定义好了map变量之后,我们可以通过下面的方式向这个map变量中添加元素:
type Person struct {
name string
age int
}
func main() {
var people map[Person]int
people = make(map[Person]int)
people[Person{"Tom", 25}] = 100
people[Person{"Jerry", 26}] = 200
}
在上面的代码中,我们向people这个map中添加了两个元素,分别为{Person{name: “Tom”, age: 25}, 100}和{Person{name: “Jerry”, age: 26}, 200}。其中,我们使用了Person结构体的值作为map的键。
如何访问map中的元素
在向map中添加元素之后,我们可以根据键来访问map中对应的值。
type Person struct {
name string
age int
}
func main() {
var people map[Person]int
people = make(map[Person]int)
people[Person{"Tom", 25}] = 100
people[Person{"Jerry", 26}] = 200
fmt.Println(people[Person{"Tom", 25}])
fmt.Println(people[Person{"Jerry", 26}])
}
在上面的代码中,我们使用fmt.Println()函数输出了键为{Person{name: “Tom”, age: 25}}和{Person{name: “Jerry”, age: 26}}的元素对应的值。
如何判断map中是否存在指定的键
在使用map时,我们经常需要判断某个键是否存在于map中。此时,我们可以使用map的特殊语法来判断,如下所示:
type Person struct {
name string
age int
}
func main() {
var people map[Person]int
people = make(map[Person]int)
people[Person{"Tom", 25}] = 100
people[Person{"Jerry", 26}] = 200
if _, ok := people[Person{"Tom", 25}]; ok {
fmt.Println("Tom in the map.")
} else {
fmt.Println("Tom not in the map.")
}
if _, ok := people[Person{"Spike", 30}]; ok {
fmt.Println("Spike in the map.")
} else {
fmt.Println("Spike not in the map.")
}
}
在上面的代码中,我们使用了map的特殊语法来判断{Person{name: “Tom”, age: 25}}和{Person{name: “Spike”, age: 30}}两个键是否存在于people这个map中。由于Tom存在于map中,因此第一个语句输出 “Tom in the map.”。而由于Spike不存在于map中,因此第二个语句输出 “Spike not in the map.”。
结论
在Golang中,我们可以使用struct类型作为map的键。通过定义一个struct类型,并为map指定键类型为这个struct类型,我们可以使用struct类型的值作为map的键。
当我们需要访问map中的元素时,可以使用struct类型的值来作为map的键。同时,我们也可以使用特殊语法来判断某个键是否存在于map中。
极客笔记