2014-05-19 3 views
4

구조체가 작동하고 있습니다. 이제 구조체가 더 많은 구조체가 있습니다.이 경우에는 조각의 ID 값을 찾아야합니다. 마지막 구조에 요소의 이름 만 있습니다. 지금 내가하는 방법은 문자열이라는 이름을 찾을 때까지 유전자라는 조각의 각 요소를 읽는 것입니다. 내 문자열 이름을 찾는 더 나은 방법이 있습니까?GO : 구조체에서 요소를 검색하는 가장 좋은 방법

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

문제의 새로운 기능 : http://en.wikipedia.org/wiki/Binary_search_algorithm

이동은, 특히 예는 매우 유용 할 수 정렬 및 이진 검색 처리 할 수있는 기본 패키지를 포함 너의 루프? (단 하나의 ToLower가 루프 전에 움직일 수 있다는 것을 제외하고는.) – Volker

답변

3

.

많은 양의 데이터를 다루는 경우 (특히 많은 양의 검색을 처리 할 때) Gene 배열이 정렬 된 경우 (이 경우 이름으로) 스키마를 사용하는 것이 좋습니다. 이 경우 O (x)에서 O (log (x))까지 검색하는 복잡성을 낮추는 다양한 빠른 검색 알고리즘 (이진 검색과 같은)을 적용 할 수 있습니다. 많은 양의 데이터를 검색 할 때 큰 차이를 만들 수 있습니다.

바이너리 서치 알고리즘에 대한 자세한

위키피디아에서 찾을 수 있습니다 : http://golang.org/pkg/sort/

관련 문제