我有这段代码迭代地图并根据关系类型过滤一些字段,我必须运行两个循环并且感觉它对于大地图来说会很慢。有没有什么方法可以技术/重构来使这个代码更高效。
func getFields(filter map[string]map[string]bool, msg *Message) (fs []Field) {
for k, _ := range filter {
if relationString(msg) == k {
if fieldFilter, ok := filter[k]; ok {
for _, f := range msg.Fields {
if _, ok := fieldFilter[f.Name]; ok {
fs = append(fs, f)
}
}
}
}
}
return
}
答案 0 :(得分:1)
您不需要外部循环作为一项改进:
func getFields(filter map[string]map[string]bool, msg *Message) (fs []Field) {
if fieldFilter, ok := filter[relationString(msg)]; ok {
for _, f := range msg.Fields {
if _, ok := fieldFilter[f.Name]; ok {
fs = append(fs, f)
}
}
}
}
return
}