Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengisih Go Struct dengan betul mengikut masanya. Medan Masa?

Bagaimana untuk Mengisih Go Struct dengan betul mengikut masanya. Medan Masa?

Patricia Arquette
Patricia Arquetteasal
2025-01-02 13:42:38180semak imbas

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

Isih Struktur mengikut Masanya. Medan Masa

Anda sedang cuba mengisih struct dalam Pergi mengikut medan masanya.Masa, yang telah menghadapi masalah. Serpihan kod yang anda berikan termasuk pelaksanaan isihan tersuai menggunakan sekeping struct reviews_data anda dan peta:

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] }

Walau bagaimanapun, isu anda yang dilaporkan ialah hasil tidak diisih dengan betul. Ini boleh disebabkan oleh beberapa sebab:

  • Algoritma Salah: Semak semula fungsi Kurang anda untuk memastikan ia membandingkan medan tarikh dengan betul menggunakan kaedah Sebelum, yang menentukan sama ada kali pertama lebih awal daripada yang kedua.
  • Pelaksanaan Antara Muka: Jenis timeSlice mestilah sepenuhnya laksanakan isihan.Antara Muka dengan menyediakan semua kaedah yang diperlukan (Len, Less, Swap).
  • Akses Serentak: Jika anda mengakses peta reviews_data_map secara serentak semasa mengisih, ia boleh membawa kepada keputusan yang tidak konsisten. Gunakan teknik penyegerakan seperti kunci untuk menghalang senario ini.

Penyelesaian yang Diperbaiki (Go 1.8 dan ke atas):

Menggunakan fungsi isihan.Slice yang diperkenalkan dalam Go 1.8 , anda boleh memudahkan kod pengisihan anda:

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

Ini dipertingkatkan penyelesaian menggunakan fungsi pengisihan perpustakaan standard, memastikan proses pengisihan yang lebih dipercayai dan cekap.

Atas ialah kandungan terperinci Bagaimana untuk Mengisih Go Struct dengan betul mengikut masanya. Medan Masa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn