私はgo構造体を使用しています。これで、より多くの構造体を含む構造体ができました。この場合、スライス内のIdの値を調べる必要があります。最後の構造には要素の名前しかありません。現在の方法は、Genesというスライスの各要素を読み取って、文字列Nameを見つけるまでです。文字列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
}
}
あなたのコードはうまく機能しているようで、私の知る限り、線形検索を行うための「より良い」方法はありません。
ただし、大量のデータを扱う場合(特に大量の検索を扱う場合)は、Gene配列が(この場合は名前で)並べ替えられるスキームを使用することをお勧めします。この場合、さまざまな高速検索アルゴリズム(バイナリ検索など)を適用できます。これにより、検索の複雑さがO(x)からO(log(x))に下がります。これは、大量のデータを検索するときに大きな違いを生む可能性があります。
バイナリ検索アルゴリズムの詳細については、ウィキペディアをご覧ください。http://en.wikipedia.org/wiki/Binary_search_algorithm
Goには、ソートとバイナリ検索を処理できるデフォルトのパッケージも含まれています。特に、例は非常に便利です。http://golang.org/pkg/sort/
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加