- 此问题在此处已有答案**:
How to search for an element in a golang slice(7个答案)
2天前关闭。
我在处理go结构体,现在我有一个结构体,里面有更多的结构体,在这个例子中我需要找出一个切片中id的值,我只有最后一个结构体中元素的名字,我现在做的方法是,读取一个切片中的每个元素,直到找到我的字符串名字,有没有更好的方法来找到我的字符串名字?
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
}
}
2条答案
按热度按时间lmyy7pcs1#
你的代码看起来工作得很好,据我所知,没有任何“更好”的方法来做线性搜索。
但是如果你要处理大量的数据(特别是当你要处理大量的搜索时),你可能需要使用一个对基因数组进行排序的方案(在本例中是按名称排序)。在这种情况下,可以应用各种更快的搜索算法(如二进制搜索),这将搜索的复杂度从O(x)降低到O(log(x))。这在搜索大量数据时会有很大的不同。
关于二进制搜索算法的更多信息可以在维基百科上找到:http://en.wikipedia.org/wiki/Binary_search_algorithm
Go语言还包含了一个默认的包,可以处理排序和二进制搜索,特别是下面的例子会非常有用:http://golang.org/pkg/sort/
wnrlj8wa2#
Go语言可以很好地与json一起工作。当然,作为一个选项,从内存和CPU的Angular 来看,它并不是最优的。但是,您可以应用封送处理并搜索整个结构的文本......