0Pricing
Go Academy · Pelajaran

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 langsung
  • sort.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.Reverse membalikkan urutan; sort.Interface menyediakan 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

  1. Mengurutkan Slice
  2. Urutan Pengurutan Kustom
  3. Mencari Data Terurut
  4. Pengurutan Stabil
← Kembali ke Go Academy