Menu
CoddyTech

reduce Metodu

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

reduce(), bir dizinin tüm öğelerini tek bir değerde birleştirir: bir toplam, bir çarpım, en büyük öğe, bir cümle.

var numbers = [1, 2, 3, 4]
var total = numbers.reduce(func(acc, n): return acc + n, 0)
print(total)
10

İki bağımsız değişken alır: bir işlev ve burada 0 olan bir başlangıç değeri. İşlev, o ana kadarki sonucu ( biriktirici olarak adlandırılır: acc) ve sonraki öğeyi alır. Döndürdüğü değer yeni biriktirici olur:

  • acc değeri 0 ile başlar
  • 0 + 1 değeri 1, 1 + 2 değeri 3, 3 + 3 değeri 6, 6 + 4 değeri 10 olur
  • son öğeden sonra reduce(), biriktiriciyi döndürür: 10

Bir çarpım için 1 ile başla: numbers.reduce(func(acc, n): return acc * n, 1) sonucu 24 eder.

Başlangıç değeri olmadan, ilk öğe başlangıç olur ve işlev ikinci öğeden itibaren çalışır. Bu, en büyük öğeyi bulmak için uygundur:

var biggest = [4, 9, 2].reduce(func(a, b): return a if a > b else b)
print(biggest) # 9

Başlangıç değeri olmayan boş bir dizide reduce(), null döndürür; bu nedenle dizi boş olabiliyorsa bir başlangıç değeri verin.

Akümülatör herhangi bir türde olabilir. Başlangıç değeri "" olduğunda, bu işlem ilk harflerden bir String oluşturur:

var words = ["game", "over"]
print(words.reduce(func(acc, w): return acc + w[0], "")) # go
challenge icon

Görev

Kolay

Program, virgülle ayrılmış tam sayılardan oluşan bir satırı okur ve bunları numbers dizisinde saklar. Bu kısım zaten yazılmıştır.

Her biri için reduce() kullanarak üç satır yazdır:

  1. sayıların toplamı
  2. sayıların çarpımı
  3. en büyük sayı (karşılaştırmayı lambda içinde yaz; max() çağırma)

Her zaman en az bir sayı vardır. 3,7,2,8,4 girdisi için çıktı şöyledir:

24
1344
8

Kendin dene

extends Node

func _ready():
	var numbers := []
	for part in OS.read_string_from_stdin().split(","):
		numbers.append(int(part))
	# Toplamı, çarpımı ve en büyük sayıyı, her birini reduce() kullanarak yazdır
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