> 백엔드 개발 > Golang > Go에서 여러 매개변수로 구조체를 정렬하는 방법은 무엇입니까?

Go에서 여러 매개변수로 구조체를 정렬하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-16 12:20:11
원래의
321명이 탐색했습니다.

How to Sort Structs by Multiple Parameters in Go?

여러 매개변수를 사용하여 구조체 정렬

질문:

어떻게 구조체 배열을 정렬할 수 있습니까? 여러 매개변수로 정렬됩니다. 특히 성, 이름 순으로 정렬됩니다. Go?

답변:

Go에는 여러 매개변수가 있는 구조체를 정렬하는 여러 가지 접근 방식이 있습니다.

슬라이스를 사용하는 Go 1.22.SortFunc

Go 최신 버전 (1.22 이상)은 Slices.SortFunc를 사용하여 간결한 솔루션을 제공합니다:

slices.SortFunc(members, func(a, b Member) int {
    return cmp.Or(
        cmp.Compare(a.LastName, b.LastName),
        cmp.Compare(a.FirstName, b.FirstName),
    )
})
로그인 후 복사

sort.Slice 또는 sort.Sort 함수

Go 이전 버전의 경우 다음을 고려하세요. sort.Slice 또는 sort.Sort를 사용합니다. 둘 다 원하는 매개변수에 따라 순서를 결정하는 사용자 정의 less 함수가 필요합니다.

sort.Slice 사용:

sort.Slice(members, func(i, j int) bool {
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName
})
로그인 후 복사

sort.Sort 사용:

sort.Interface 인터페이스를 구현하는 사용자 정의 유형을 생성하고 Len을 정의합니다. Swap 및 Less 방법.

type byLastFirst []Member

func (members byLastFirst) Len() int           { return len(members) }
func (members byLastFirst) Swap(i, j int)      { members[i], members[j] = members[j], members[i] }
func (members byLastFirst) Less(i, j int) bool {
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName
}

sort.Sort(byLastFirst(members))
로그인 후 복사

성능 고려 사항:

이러한 접근 방식은 구조체를 정렬하는 다양한 방법을 제공하지만 핫스팟을 최적화하려면 성능 분석이 중요합니다. 귀하의 애플리케이션 요구 사항에 가장 적합한 접근 방식을 선택하십시오.

위 내용은 Go에서 여러 매개변수로 구조체를 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿