2016-09-08 12 views
-2

特定のキー値のマップを検索し、他のキー値を返すために以下のコードを最適化するにはどうすればよいですか?値の構造体のスライスを検索するパフォーマンスを改善する

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

コードは妥当ですが、マップの配列ではなく、構造体のスライスです。効率的な方法は、

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)です。

関連する問題