>백엔드 개발 >Golang >Go에서 `time.Time` 멤버를 기준으로 구조체 조각을 효율적으로 정렬하는 방법은 무엇입니까?

Go에서 `time.Time` 멤버를 기준으로 구조체 조각을 효율적으로 정렬하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-30 14:45:13642검색

How to Efficiently Sort a Slice of Structs by a `time.Time` Member in Go?

Go에서 Time.Time 멤버별로 구조체 배열 정렬

Go에서는 다음을 사용하여 특정 멤버별로 데이터 구조를 정렬할 수 있습니다. 패키지 정렬. 이는 날짜 또는 시간 필드를 기준으로 요소를 시간순으로 정렬하려는 경우와 같은 다양한 시나리오에 유용합니다.

시간을 기준으로 구조체 조각을 정렬하려면 Time.Time 멤버를 사용하여 사용자 정의 유형을 정의할 수 있습니다. sort.Interface 인터페이스를 구현합니다. 이 유형은 다음 메서드를 정의해야 합니다.

  • Len() int: 슬라이스의 길이를 반환합니다.
  • Less(i, j int) bool: 인덱스에 있는 요소가 있는지 결정합니다. i는 인덱스 j의 요소보다 작습니다.
  • Swap(i, j int): 인덱스 i와 요소를 교환합니다. j.

주어진 코드에서 이러한 메소드를 구현하는 timeSlice 유형을 정의했습니다. 그러나 Less 메서드는 포인터를 실제 값 대신 time.Time 값과 비교합니다. 이 문제를 해결하려면 time.Time의 Before 메서드를 사용하여 시간 값을 직접 비교할 수 있습니다.

func (p timeSlice) Less(i, j int) bool {
    return p[i].date.Before(p[j].date)
}

사용자 정의 유형을 정의한 후에는 sort.Sort 함수를 사용하여 슬라이스를 정렬할 수 있습니다. 그러나 Go 버전 1.8 이상에서는 더 효율적이고 간결한 sort.Slice 함수를 사용할 수 있습니다.

sort.Slice(timeSlice, func(i, j int) bool {
    return timeSlice[i].date.Before(timeSlice[j].date)
})

sort.Slice 함수는 두 가지 인수, 즉 정렬할 슬라이스와 비교 함수를 정의하는 클로저입니다. 이 경우 클로저는 인덱스 i의 요소가 인덱스 j의 요소보다 작으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

슬라이스 정렬 후 요소는 날짜를 기준으로 오름차순으로 정렬됩니다. 회원입니다.

위 내용은 Go에서 `time.Time` 멤버를 기준으로 구조체 조각을 효율적으로 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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