Menu
CoddyTech

Pengurutan Kustom

Termasuk bagian Logika dan Alur dalam perjalanan GDScript di Coddy. Pelajaran 51 dari 78.

sort() mengurutkan array secara menaik dan mengubah array itu sendiri. Angka diurutkan dari yang terkecil hingga terbesar, dan string mengikuti urutan yang sama seperti min(), dengan huruf kapital lebih dahulu. Lalu, reverse() menghasilkan urutan menurun:

var scores := [40, 95, 12, 70]
scores.sort()
print(scores) # [12, 40, 70, 95]
scores.reverse()
print(scores) # [95, 70, 40, 12]

Untuk urutan lainnya, panggil sort_custom() dengan fungsi pembanding. Fungsi ini menerima dua elemen, a dan b, lalu mengembalikan true ketika a harus berada sebelum b. Berikan fungsi berdasarkan namanya, tanpa tanda kurung:

func by_length(a: String, b: String) -> bool:
	return a.length() < b.length()

func _ready():
	var words := ["banana", "fig", "kiwi"]
	words.sort_custom(by_length)
	print(words) # ["fig", "kiwi", "banana"]

Perbandingan dapat memeriksa isi elemen. Contoh ini menempatkan dictionary dengan "hp" terbanyak di urutan pertama:

func by_hp(a: Dictionary, b: Dictionary) -> bool:
	return a["hp"] > b["hp"]

Pengurutan tidak stabil: elemen yang hasil perbandingannya sama bisa berakhir dalam urutan apa pun. Jika urutan elemen yang nilainya sama penting, bandingkan field kedua saat field pertama sama:

func by_score_then_name(a: Dictionary, b: Dictionary) -> bool:
	if a["score"] != b["score"]:
		return a["score"] > b["score"]
	return a["player"] < b["player"]

sort_custom() tersedia pada Array, tetapi tidak pada PackedStringArray yang dikembalikan oleh split(), jadi ubah terlebih dahulu dengan Array(...). Kamu juga akan menjumpai perbandingan yang ditulis secara inline, seperti pada sort_custom(func(a, b): return a > b). Bentuk itu adalah lambda, yang dibahas dalam bab Fungsi Lanjutan.

challenge icon

Tantangan

Mudah

Program membaca dua baris: bilangan bulat yang dipisahkan oleh spasi, dan kata-kata yang dipisahkan oleh spasi. Kode yang diberikan menyimpannya dalam numbers (array berisi int) dan words (array berisi string).

  1. Tulis fungsi pembanding by_length(a: String, b: String) -> bool di tingkat teratas. Kata yang lebih pendek berada lebih dahulu, dan kata-kata dengan panjang yang sama diurutkan secara alfabetis.
  2. Cetak empat baris: angka dalam urutan menaik, angka dalam urutan menurun, kata-kata dalam urutan alfabetis (dengan sort()), dan kata-kata yang diurutkan dengan sort_custom(by_length).

Untuk input 5 3 8 1 2 dan elephant cat dolphin bee, output-nya adalah:

Ascending: [1, 2, 3, 5, 8]
Descending: [8, 5, 3, 2, 1]
Alphabetical: ["bee", "cat", "dolphin", "elephant"]
By length: ["bee", "cat", "dolphin", "elephant"]

Coba sendiri

extends Node

# Tulis fungsi pembanding by_length() di sini

func _ready():
	var numbers: Array[int] = []
	for text in OS.read_string_from_stdin().split(" ", false):
		numbers.append(int(text))
	var words := Array(OS.read_string_from_stdin().split(" ", false))
	# Urutkan kedua array dan cetak empat baris
	pass
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler GDScript online