Golang map的多键索引
在大多数的编程语言中,映射容器的键必须以单一值存在。这种映射方法经常被用在诸如信息索引上,如根据通讯簿的名字进行检索。但随着查询条件越来越复杂,检索也会变得越发困难。代码示例:package mainimport ("fmt")type queryKey struct {Name stringAgeint}type Profile struct {Name...
·
在大多数的编程语言中,映射容器的键必须以单一值存在。这种映射方法经常被用在诸如信息索引上,如根据通讯簿的名字进行检索。但随着查询条件越来越复杂,检索也会变得越发困难。
代码示例:
package main
import (
"fmt"
)
type queryKey struct {
Name string
Age int
}
type Profile struct {
Name string
Age int
Address string
}
var mapper = make(map[queryKey]*Profile)
func buildIndex(list []*Profile) {
for _, profile := range list {
key := queryKey{ //查询的组合键为Name、Age构建的结构体
Name: profile.Name,
Age: profile.Age,
}
mapper[key] = profile
}
}
func queryData(name string, age int) {
key := queryKey{Name: name, Age: age}
result, ok := mapper[key]
if ok {
fmt.Println(result)
} else {
fmt.Println("没有找到对应的数据")
}
}
func findData(list []*Profile, name string, age int) {
for _, data := range list {
if data.Name==name&&data.Age==age {
fmt.Println(data)
return
}
}
fmt.Println("没有找到对应的数据")
}
func main() {
//待查询的数据:
//数据内容不重复
list := []*Profile{
{Name: "张三", Age: 23, Address: "cq"},
{Name: "李四", Age: 25},
{Name: "王五"},
}
//传统查询
findData(list, "张三", 23)
//利用map的多键索引查询(组合键查询)
buildIndex(list) //构建基于查询的组合键(name、age)
queryData("张三", 23) //依据name、age进行查询(多条件)
}
基于map的多键值索引,可以提高查询效率。尤其是在一些对查询时效要求较高的场景,map的多键值索引是一个很好的选择。Go语言中并没有为map提供任何清空所有元素的函数、方法,只提供了
func delete(m map[Type]Type1, key Type)
函数。不用担心垃圾回收的效率,Go语言的并行垃圾回收效率比写一个清空函数高效多了。
➢了解更多Go语言知识:https://study.163.com/course/introduction/1210620804.htm
更多推荐
已为社区贡献4条内容
所有评论(0)