Menu
CoddyTech

Özel Sıralama

Coddy'nin GDScript Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 51 / 78.

sort() bir diziyi artan sırada sıralar ve dizinin kendisini değiştirir. Sayılar küçükten büyüğe sıralanır, dizeler ise min() ile aynı sırayı izler; önce büyük harfler gelir. reverse() daha sonra azalan sırayı verir:

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

Diğer sıralama düzenleri için sort_custom() işlevini bir karşılaştırma işleviyle çağırın. Bu işlev iki öğe, a ve b alır ve a, b'den önce gelmeliyse true döndürür. İşlevi parantez kullanmadan adıyla iletin:

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

Karşılaştırma, öğelerin içine bakabilir. Bu, en çok "hp" değerine sahip sözlüğü ilk sıraya koyar:

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

Sıralama kararlı değildir: eşit olarak karşılaştırılan öğeler herhangi bir sırada yer alabilir. Eşitliklerin önemli olduğu durumlarda, ilk alan eşitse ikinci bir alanı karşılaştırın:

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(), Array üzerinde bulunur, ancak split() tarafından döndürülen PackedStringArray üzerinde bulunmaz; bu yüzden önce Array(...) ile dönüştürün. Ayrıca karşılaştırmanın satır içinde yazıldığı biçimle de karşılaşacaksınız; örneğin sort_custom(func(a, b): return a > b). Bu biçim, İleri Düzey Fonksiyonlar bölümünde ele alınan bir lambda'dır.

challenge icon

Görev

Kolay

Program iki satır okur: boşluklarla ayrılmış tam sayılar ve boşluklarla ayrılmış sözcükler. Verilen kod bunları numbers (bir int dizisi) ve words (bir string dizisi) içinde saklar.

  1. En üst düzeyde bir karşılaştırma işlevi by_length(a: String, b: String) -> bool yaz. Daha kısa sözcük önce gelir; aynı uzunluktaki sözcükler alfabetik sıradadır.
  2. Dört satır yazdır: sayıları artan sırada, sayıları azalan sırada, sözcükleri alfabetik sırada (sort() ile) ve sort_custom(by_length) ile sıralanmış sözcükleri.

5 3 8 1 2 ve elephant cat dolphin bee girdileri için çıktı şöyledir:

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

Kendin dene

extends Node

# Karşılaştırma fonksiyonu by_length()'i buraya yazın

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))
	# Dizileri sıralayın ve dört satırı yazdırın
	pass
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online GDScript derleyicisi