我有一个像mapstringstring一样的映射结构。现在,我必须找到值片中具有所需值的所有键。我可以这样做:
// allsvc is map[string][]string
var newsl []string
for k, v := range allsvc {
for _, val := range v {
if v == "type1" || v == "type2" {
newsl.append(k)
}
}
}
在任何给定时间,map allsvc都至少有50万个条目,并且查找非常频繁。我得到的allsvc映射作为第三方库的输出,然后我必须使用我的api中的值在其中进行搜索并提供响应。考虑到不使用键而使用值的查找频率很高,我这样做的方式使我的api响应时间以秒为单位。有没有办法提高性能(查找速度)?
发布于 2017-07-24 00:47:30
如果您要多次查询该映射,那么在获得它时,可能值得花费一些时间重新安排它,以便您可以更快地查询它。
您似乎需要颠倒关系,使allsvc
中的值成为新映射中的键,并将键作为值,这样您就可以在新映射中进行查找。
这可以是重新排列贴图的一种方式:
func arrangeMap(oldMap map[string][]string) map[string][]string {
newMap := make(map[string][]string)
for k, v := range oldMap {
for _, val := range v {
newMap[val] = append(newMap[val], k)
}
}
return newMap
}
在这里可以看到一个展示这个想法的游乐场:
https://stackoverflow.com/questions/45270992
复制相似问题