사용자 정의 필드 비교기를 사용하여 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"` }
축 필드를 기준으로 이 배열을 어떻게 정렬할 수 있나요?
해결책:
Go 1.8부터 sort.Slice 함수는 사용자 정의 비교 함수를 사용하여 슬라이스를 정렬하는 편리한 방법을 제공합니다. 축별로 행성 배열을 정렬하려면 다음 코드를 사용할 수 있습니다.
import "sort" // Define a comparison function to compare planets by their Axis value. var sortByAxis = func(i, j int) bool { return planets[i].Axis < planets[j].Axis } // Create a slice over the array and sort it using the custom comparison function. sort.Slice(planets[:], sortByAxis)
배열과 슬라이스 사용:
일반적으로 슬라이스를 사용하는 것이 좋습니다. 슬라이스가 더 유연하고 효율적이기 때문에 Go에서는 배열보다 더 좋습니다. 그러나 이 경우 planets 변수는 배열로 선언됩니다. sort.Slice를 사용하여 작동하게 하려면 planets[:]를 사용하여 슬라이스로 오버레이해야 합니다.
배열 구조 정렬 및 유지 관리:
중요합니다 정렬 작업으로 인해 배열이 제자리에 수정됩니다. 원래 배열 구조를 유지하려면 정렬하기 전에 슬라이스의 복사본을 생성하면 됩니다.
planetSlice := make([]Planet, len(planets)) copy(planetSlice, planets) sort.Slice(planetSlice, sortByAxis)
이렇게 하면 원본 배열에 영향을 주지 않고 정렬된 슬라이스를 사용할 수 있습니다.
위 내용은 사용자 정의 필드를 기준으로 Go 구조체 배열을 효율적으로 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!