>백엔드 개발 >Golang >Go에서 여러 기준(성, 이름 순)으로 구조체를 정렬하는 방법은 무엇입니까?

Go에서 여러 기준(성, 이름 순)으로 구조체를 정렬하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-09 20:07:19209검색

How to Sort Structs in Go by Multiple Criteria (LastName then FirstName)?

여러 기준으로 구조체 정렬

Go에서는 다양한 접근 방식을 사용하여 구조체 조각을 정렬할 수 있습니다. 이 토론에서는 여러 매개변수, 특히 LastName과 FirstName을 기준으로 정렬하는 데 중점을 둡니다.

방법 1: Slices.SortFunc(Go 1.22 )

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),
    )
})

방법 2: sort.Slice 또는 sort.Sort

Go 1.8에서는 sort.Slice 또는 sort.Sort를 사용할 수 있습니다. 둘 다 순서를 결정하는 데 더 적은 기능이 필요합니다. 이 함수는 LastName 및 FirstName 필드를 비교합니다.

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를 구현하는 사용자 정의 유형이 필요합니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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