Urutan Pengurutan Kustom
Definisikan fungsi perbandingan
Urutan Pengurutan Kustom adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Melampaui Urutan Bawaan
Pengurutan bawaan menggunakan urutan menaik. Namun, data nyata memerlukan aturan khusus: mengurutkan berdasarkan panjang, beberapa bidang, atau nilai terhitung.
Fungsi perbandingan adalah tempat Anda menyatakan aturan apa pun yang diinginkan.
Fungsi Less
Fungsi perbandingan untuk sort.Slice memiliki tanda tangan func(i, j int) bool. Fungsi ini mengembalikan true ketika elemen i harus berada sebelum elemen j.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{4, 1, 3}
less := func(i, j int) bool { return nums[i] < nums[j] }
sort.Slice(nums, less)
fmt.Println(nums)
}Mengurutkan berdasarkan Panjang String
Alih-alih berdasarkan alfabet, bandingkan len() setiap string untuk mengurutkannya berdasarkan panjang.
package main
import (
"fmt"
"sort"
)
func main() {
words := []string{"pear", "fig", "banana"}
sort.Slice(words, func(i, j int) bool {
return len(words[i]) < len(words[j])
})
fmt.Println(words)
}Mengurutkan Struktur berdasarkan Bidang
Pilih bidang struktur apa pun untuk perbandingan. Di sini, kita mengurutkan produk berdasarkan harga.
package main
import (
"fmt"
"sort"
)
type Product struct {
Name string
Price int
}
func main() {
items := []Product{{"Pen", 3}, {"Book", 12}, {"Cup", 7}}
sort.Slice(items, func(i, j int) bool {
return items[i].Price < items[j].Price
})
fmt.Println(items)
}Pengurutan Berdasarkan Beberapa Bidang
Untuk menyelesaikan nilai yang sama, bandingkan bidang kedua ketika bidang pertama sama. Urutkan berdasarkan usia, lalu berdasarkan nama.
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
p := []Person{{"Zoe", 30}, {"Ann", 30}, {"Bob", 25}}
sort.Slice(p, func(i, j int) bool {
if p[i].Age != p[j].Age {
return p[i].Age < p[j].Age
}
return p[i].Name < p[j].Name
})
fmt.Println(p)
}Membalikkan dengan sort.Reverse
sort.Reverse membungkus sort.Interface untuk membalikkan urutannya. Fungsi ini dapat dipasangkan dengan pembantu seperti sort.IntSlice.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{1, 4, 2, 3}
sort.Sort(sort.Reverse(sort.IntSlice(nums)))
fmt.Println(nums)
}sort.Interface
Untuk kendali penuh, implementasikan sort.Interface: tiga metode, yaitu Len(), Less(i, j int) bool, dan Swap(i, j int).
package main
import (
"fmt"
"sort"
)
type ByLen []string
func (s ByLen) Len() int { return len(s) }
func (s ByLen) Less(i, j int) bool { return len(s[i]) < len(s[j]) }
func (s ByLen) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func main() {
w := []string{"ccc", "a", "bb"}
sort.Sort(ByLen(w))
fmt.Println(w)
}Mengurutkan berdasarkan Nilai Terhitung
Perbandingan dapat menggunakan ekspresi apa pun. Urutkan angka berdasarkan jarak absolutnya dari nol.
package main
import (
"fmt"
"sort"
)
func abs(n int) int {
if n < 0 {
return -n
}
return n
}
func main() {
nums := []int{-5, 2, -1, 3}
sort.Slice(nums, func(i, j int) bool {
return abs(nums[i]) < abs(nums[j])
})
fmt.Println(nums)
}Pengurutan Tanpa Membedakan Huruf Besar-Kecil
Gunakan strings.ToLower di dalam perbandingan untuk mengabaikan kapitalisasi saat mengurutkan string.
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
w := []string{"banana", "Apple", "cherry"}
sort.Slice(w, func(i, j int) bool {
return strings.ToLower(w[i]) < strings.ToLower(w[j])
})
fmt.Println(w)
}Slice vs Interface
Ada dua cara untuk menyesuaikan urutan:
sort.Slice- fungsi pembanding singkat yang ditulis langsungsort.Interface- tipe bernama yang dapat digunakan kembali, dengan tiga metode
Utamakan sort.Slice untuk pengurutan sekali pakai.
Jaga Kemurnian Perbandingan
Fungsi perbandingan seharusnya hanya membaca elemen dan mengembalikan nilai boolean. Fungsi tersebut tidak boleh mengubah slice atau menimbulkan efek samping, karena pengurutan dapat berperilaku tidak terduga.
Pemeriksaan Cepat
Anda ingin mengurutkan orang berdasarkan usia, lalu berdasarkan nama ketika usianya sama. Teknik apa yang Anda gunakan?
Ringkasan
Anda dapat menentukan urutan pengurutan apa pun:
- Fungsi pembanding menyatakan aturan Anda
- Pengurutan berdasarkan beberapa bidang membandingkan bidang kedua ketika nilainya sama
sort.Reversemembalikkan urutan;sort.Interfacemenyediakan tipe yang dapat digunakan kembali
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Urutan Pengurutan Kustom” gratis?
Ya — teks lengkap “Urutan Pengurutan Kustom” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Urutan Pengurutan Kustom”?
Definisikan fungsi perbandingan Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Urutan Pengurutan Kustom” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengurutkan Slice
- Urutan Pengurutan Kustom
- Mencari Data Terurut
- Pengurutan Stabil