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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-22 15:26:15611검색

How Can I Efficiently Sort a Go Struct Array by a Custom Field?

사용자 정의 필드 비교기를 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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