Menu
CoddyTech

מתודת reduce

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 62 מתוך 78.

reduce() משלבת את כל האיברים במערך לערך אחד: סכום, מכפלה, האיבר הגדול ביותר, משפט.

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

היא מקבלת שני ארגומנטים: פונקציה וערך התחלתי, כאן 0. הפונקציה מקבלת את התוצאה עד כה, שנקראת צובר (acc), ואת האיבר הבא. הערך שהיא מחזירה הופך לצובר החדש:

  • acc מתחיל ב־0
  • 0 + 1 הוא 1, 1 + 2 הוא 3, 3 + 3 הוא 6, 6 + 4 הוא 10
  • אחרי האיבר האחרון, reduce() מחזירה את הצובר: 10

עבור מכפלה, מתחילים ב־1: numbers.reduce(func(acc, n): return acc * n, 1) הוא 24.

ללא ערך התחלתי, האיבר הראשון הוא נקודת ההתחלה והפונקציה פועלת מהאיבר השני ואילך. זה מתאים למציאת האיבר הגדול ביותר:

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

במערך ריק ללא ערך התחלה, reduce() מחזירה null, לכן יש לספק ערך התחלה כשהמערך עשוי להיות ריק.

למצטבר יכול להיות כל טיפוס. עם ערך התחלתי של "", הקוד הזה בונה מחרוזת מהאותיות הראשונות:

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

אתגר

קל

התוכנית קוראת שורה אחת של מספרים שלמים המופרדים בפסיקים ושומרת אותם במערך numbers. החלק הזה כבר כתוב.

השתמשו ב-reduce() עבור כל אחד מהם, והדפיסו שלוש שורות:

  1. סכום המספרים
  2. מכפלתם
  3. המספר הגדול ביותר (כתבו את ההשוואה ב-lambda; אל תקראו ל-max())

תמיד יש לפחות מספר אחד. עבור הקלט 3,7,2,8,4, הפלט הוא:

24
1344
8

נסו בעצמכם

extends Node

func _ready():
	var numbers := []
	for part in OS.read_string_from_stdin().split(","):
		numbers.append(int(part))
	# הדפס את הסכום, המכפלה והמספר הגדול ביותר, כל אחד באמצעות reduce()
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר GDScript אונליין