Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Isih Tatasusunan Go Struct dengan Cekap mengikut Medan Tersuai?

Bagaimanakah Saya Boleh Isih Tatasusunan Go Struct dengan Cekap mengikut Medan Tersuai?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-22 15:26:15556semak imbas

How Can I Efficiently Sort a Go Struct Array by a Custom Field?

Isih Tatasusunan Elegan dalam Go dengan Pembanding Medan Tersuai

Mengisih tatasusunan struct mengikut medan tertentu boleh menjadi tugas biasa dalam pengaturcaraan Go . Mari kita terokai cara yang cekap dan boleh disesuaikan untuk mencapai matlamat ini.

Masalahnya:

Diberikan pelbagai struct seperti berikut:

type Planet struct {
    Name       string  `json:"name"`
    Aphelion   float64 `json:"aphelion"`   // in million km
    Perihelion float64 `json:"perihelion"` // in million km
    Axis       int64   `json:"Axis"`       // in km
    Radius     float64 `json:"radius"`
}

Bagaimanakah kita boleh mengisih tatasusunan ini mengikut medan Axis?

The Penyelesaian:

Sejak Go 1.8, fungsi sort.Slice menyediakan cara yang mudah untuk mengisih kepingan menggunakan fungsi perbandingan tersuai. Untuk mengisih tatasusunan planet mengikut Axis, kita boleh menggunakan kod berikut:

import "sort"

// Define a comparison function to compare planets by their Axis value.
var sortByAxis = func(i, j int) bool {
    return planets[i].Axis < planets[j].Axis
}

// Create a slice over the array and sort it using the custom comparison function.
sort.Slice(planets[:], sortByAxis)

Menggunakan Tatasusunan lwn. Slices:

Biasanya, disyorkan untuk menggunakan kepingan atas tatasusunan dalam Go kerana kepingan lebih fleksibel dan cekap. Walau bagaimanapun, dalam kes ini, pembolehubah planet diisytiharkan sebagai tatasusunan. Untuk menjadikannya berfungsi dengan sort.Slice, kita perlu menindihnya dengan kepingan menggunakan planet[:].

Isih dan Mengekalkan Struktur Tatasusunan:

Ia penting untuk ambil perhatian bahawa operasi pengisihan mengubah suai tatasusunan di tempatnya. Jika anda ingin mengekalkan struktur tatasusunan asal, anda boleh membuat salinan hirisan sebelum mengisih:

planetSlice := make([]Planet, len(planets))
copy(planetSlice, planets)
sort.Slice(planetSlice, sortByAxis)

Ini membolehkan anda menggunakan kepingan yang diisih tanpa menjejaskan tatasusunan asal.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Isih Tatasusunan Go Struct dengan Cekap mengikut Medan Tersuai?. 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