>백엔드 개발 >Golang >Go 구조체를 시간별로 올바르게 정렬하는 방법.시간 필드?

Go 구조체를 시간별로 올바르게 정렬하는 방법.시간 필드?

Patricia Arquette
Patricia Arquette원래의
2025-01-02 13:42:38167검색

How to Correctly Sort a Go Struct by its time.Time Field?

시간을 기준으로 구조체 정렬.Time 필드

Go에서 시간을 기준으로 구조체를 정렬하려고 합니다.Time 필드, 문제가 발생한 것입니다. 제공하신 코드 조각에는 review_data 구조체 조각과 맵을 사용하는 사용자 정의 정렬 구현이 포함되어 있습니다.

type timeSlice []reviews_data

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

그러나 보고된 문제는 결과가 올바르게 정렬되지 않는다는 것입니다. 이는 여러 가지 이유 때문일 수 있습니다.

  • 잘못된 알고리즘: Less 함수를 다시 확인하여 Before 메서드를 사용하여 날짜 필드를 올바르게 비교하는지 확인하세요. 첫 번째 시간이 두 번째 시간보다 빠릅니다.
  • 인터페이스 구현: timeSlice 유형은 필요한 모든 메소드(Len, Less, Swap)를 제공하여 sort.Interface.
  • 동시 액세스: 정렬하는 동안 리뷰_데이터_맵 지도에 동시에 액세스하는 경우 일관성 없는 결과가 발생할 수 있습니다. . 이 시나리오를 방지하려면 잠금과 같은 동기화 기술을 사용하세요.

향상된 솔루션(Go 1.8 이상):

Go 1.8에 도입된 sort.Slice 기능 사용 을 사용하면 정렬 코드를 단순화할 수 있습니다.

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

이 개선된 솔루션은 표준 라이브러리의 정렬 기능을 사용하여 보다 안정적이고 효율적인 정렬 프로세스를 보장합니다.

위 내용은 Go 구조체를 시간별로 올바르게 정렬하는 방법.시간 필드?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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