我正在使用go结构,现在我有一个结构中有更多的结构,在这种情况下,我需要在切片中找出Id的值。我在最后一个结构中只有一个元素的名称, 我现在这样做的方法是读取一个名为Genes的切片的每个元素,直到找到我的字符串Name。 有没有更好的做法来找到我的字符串名称?
type GenresResponse struct {
Count int `xml:"count,attr"`
PageIndex int `xml:"page_index,attr"`
PageSize int `xml:"page_size,attr"`
NumOfResults int `xml:"num_of_results,attr"`
TotalPages int `xml:"total_pages,attr"`
Genes []Gene `xml:"gene"`
}
type Gene struct {
Category string `xml:"category,attr"`
Id string `xml:"id,attr"`
Translations Translations `xml:"translations"`
}
type Translations struct{
Translation Translation `xml:"translation"`
}
type Translation struct{
Lang string `xml:"lang,attr"`
Name string `xml:"name"`
}
这就是我阅读它的方式
idToFind := "0"
for _, genreItem := range responseStruct.Genes {
if strings.ToLower(genreItem.Translations.Translation.Name) == strings.ToLower(myNameValue){
idToFind = genreItem.Id
break
}
}
答案 0 :(得分:3)
您的代码似乎工作正常,据我所知,没有任何"更好"做线性搜索的方法。
但是如果您正在处理大量数据(特别是在处理大量搜索时),您可能想要使用一个方案,如果Gene数组已经排序(在这种情况下按名称)。在这种情况下,可以应用各种更快的搜索算法(如二进制搜索),这降低了从O(x)到O(log(x))的搜索的复杂性。在搜索大量数据时,这会产生很大的不同。
有关二元搜索算法的更多信息,请访问维基百科:http://en.wikipedia.org/wiki/Binary_search_algorithm
Go还包含一个可以处理排序和二进制搜索的默认包,特别是这些示例非常有用:http://golang.org/pkg/sort/