GO:在结构体上搜索元素的最佳方法[duplicate]

sh7euo9m  于 2023-01-22  发布在  Go
关注(0)|答案(2)|浏览(175)
    • 此问题在此处已有答案**:

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
        }
    }
lmyy7pcs

lmyy7pcs1#

你的代码看起来工作得很好,据我所知,没有任何“更好”的方法来做线性搜索。
但是如果你要处理大量的数据(特别是当你要处理大量的搜索时),你可能需要使用一个对基因数组进行排序的方案(在本例中是按名称排序)。在这种情况下,可以应用各种更快的搜索算法(如二进制搜索),这将搜索的复杂度从O(x)降低到O(log(x))。这在搜索大量数据时会有很大的不同。
关于二进制搜索算法的更多信息可以在维基百科上找到:http://en.wikipedia.org/wiki/Binary_search_algorithm
Go语言还包含了一个默认的包,可以处理排序和二进制搜索,特别是下面的例子会非常有用:http://golang.org/pkg/sort/

wnrlj8wa

wnrlj8wa2#

Go语言可以很好地与json一起工作。当然,作为一个选项,从内存和CPU的Angular 来看,它并不是最优的。但是,您可以应用封送处理并搜索整个结构的文本......

相关问题