>백엔드 개발 >Golang >사용자 정의 필드 이름을 기준으로 구조체의 Go 배열을 효율적으로 정렬하려면 어떻게 해야 합니까?

사용자 정의 필드 이름을 기준으로 구조체의 Go 배열을 효율적으로 정렬하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-21 18:10:10338검색

How Can I Efficiently Sort a Go Array of Structs by a Custom Field Name?

사용자 정의 필드 이름을 통한 효율적인 배열 정렬

데이터 구조 정렬은 프로그래밍의 기본 작업이며 Go에서는 이를 처리하기 위한 다양한 접근 방식을 제공합니다. 특히 구조체 배열은 임의의 필드 이름을 기준으로 정렬할 때 문제가 됩니다.

문제 설명

다음 Go 코드를 고려하세요.

type Planet struct {
    Name       string  `json:"name"`
    Aphelion   float64 `json:"aphelion"`   // in million km
    Perihelion float64 `json:"perihelion"` // in million km
    Axis       int64   `json:"Axis"`       // in km
    Radius     float64 `json:"radius"`
}

func main() {
    planets := [...]Planet{{"Mars", 249.2, 206.7, 227939100, 3389.5},
                         {"Venus", 108.939, 107.477, 108208000, 6051.8},
                         {"Earth", 151.930, 147.095, 149598261, 6371.0}}
}

정렬 방법 축 필드로 행성 배열?

해결 방법

최근 Go 버전에서는 sort.Slice 함수가 사용자 정의 비교 함수를 기반으로 슬라이스를 정렬하는 효율적인 방법을 제공합니다.

sort.Slice(planets[:], func(i, j int) bool {
  return planets[i].Axis < planets[j].Axis
})

여기서 i와 j는 슬라이스 요소의 인덱스이고 비교 함수는 다음을 반환합니다. 인덱스 i의 요소가 인덱스 j의 요소보다 앞에 와야 하는 경우 true입니다. 이번 경우에는 행성의 축 필드를 비교하고 있습니다.

(슬라이스와 반대되는) 배열을 사용할 때 배열을 슬라이스로 변환하려면 슬라이스 오버레이 연산자 [:]가 필요합니다.

결론

sort.Slice를 활용하여 임의의 필드 이름을 기반으로 구조체 배열을 간단하고 효율적으로 정렬할 수 있습니다. 이는 Go에서 복잡한 데이터 구조를 정렬하기 위한 Python과 유사한 경험을 제공합니다.

위 내용은 사용자 정의 필드 이름을 기준으로 구조체의 Go 배열을 효율적으로 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.