dongnai5905 2016-09-08 15:46
浏览 27
已采纳

提高结构切片的价值搜索性能

How can I optimize the code below for searching an array of maps for a specific key-value (and then return the other key-values)?

type userMap struct {
    JiraUsername    string
    CHProjectID int
    CHID        string
}

func main() {
    var userMaps []userMap

    userMaps = append(userMaps, userMap{
        JiraUsername: "ted",
        CHProjectID: 81,
        CHID: "23jk3f32jl3323",
    })

    fmt.Println(GetUserInfo(userMaps, "ted"))
}

func GetUserInfo(userMaps []userMap, jiraUsername string) (CHProjectID int, CHID string) {
    for _, u := range userMaps {
        if u.JiraUsername == jiraUsername {
            return u.CHProjectID, u.CHID
        }
    }
    return 0, ""
}
  • 写回答

1条回答 默认 最新

  • doutun1362 2016-09-08 16:22
    关注

    Your code is reasonable, but it's not array of map, it's slice of struct. The efficient way would be

    type userMap struct {
        JiraUsername string
        CHProjectID  int
        CHID         string
    }
    type UsersMap map[string]userMap
    
    func main() {
        userMaps := make(UsersMap)
        userMaps["ted"] = userMap{
            JiraUsername: "ted",
            CHProjectID:  81,
            CHID:         "23jk3f32jl3323",
        }
    
        fmt.Println(GetUserInfo(userMaps, "ted"))
    }
    
    func GetUserInfo(userMaps UsersMap, jiraUsername string) (CHProjectID int, CHID string) {
        if u, ok := userMaps[jiraUsername]; ok {
            return u.CHProjectID, u.CHID
        }
        return 0, ""
    }
    

    This doesn't require loop and has O(1) complexity.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见