מתודת 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מתחיל ב־00 + 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אתגר
קלהתוכנית קוראת שורה אחת של מספרים שלמים המופרדים בפסיקים ושומרת אותם במערך numbers. החלק הזה כבר כתוב.
השתמשו ב-reduce() עבור כל אחד מהם, והדפיסו שלוש שורות:
- סכום המספרים
- מכפלתם
- המספר הגדול ביותר (כתבו את ההשוואה ב-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()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
2קבלת החלטות מתקדמת
התאמה עם משתניםתנאי סף להתאמהתבניות מערכיםתבניות מילוניםבדיקות חברותסיכום – מנתח פקודות5אפליקציית ספר אנשי קשר
הצגת התפריטהוספת איש קשר8מנהל רשומות תלמידים
סקירת הפרויקטהוספת תלמיד11פונקציות מסדר גבוה
מתודת mapמתודת filterמתודת reduceany ו-allחזרה: מאמת כתובות אימיילחזרה: מעבד מספריםתרגלו בעצמכם: קומפיילר GDScript אונליין