【问题标题】:Improving performance of searching slice of structs for value提高在结构切片中搜索值的性能
【发布时间】:2016-09-08 15:46:35
【问题描述】:

如何优化下面的代码以在地图数组中搜索特定键值(然后返回其他键值)?

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, ""
}

【问题讨论】:

    标签: arrays go hashmap


    【解决方案1】:

    您的代码是合理的,但它不是映射数组,而是结构切片。有效的方法是

    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, ""
    }
    

    这不需要循环并且具有 O(1) 复杂度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      相关资源
      最近更新 更多