GO:搜索结构元素的最佳方法

时间:2014-05-19 09:40:17

标签: go

我正在使用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
        }
    }

1 个答案:

答案 0 :(得分:3)

您的代码似乎工作正常,据我所知,没有任何"更好"做线性搜索的方法。

但是如果您正在处理大量数据(特别是在处理大量搜索时),您可能想要使用一个方案,如果Gene数组已经排序(在这种情况下按名称)。在这种情况下,可以应用各种更快的搜索算法(如二进制搜索),这降低了从O(x)到O(log(x))的搜索的复杂性。在搜索大量数据时,这会产生很大的不同。

有关二元搜索算法的更多信息,请访问维基百科:http://en.wikipedia.org/wiki/Binary_search_algorithm

Go还包含一个可以处理排序和二进制搜索的默认包,特别是这些示例非常有用:http://golang.org/pkg/sort/