צמצום (Reduce)
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Swift של Coddy. שיעור 25 מתוך 56.
reduce מצמצמת מערך שלם לערך יחיד. כך אפשר לסכם, להכפיל, למצוא ערך קיצוני או לבנות מחרוזת או מערך חדשים מתוך איברים רבים.
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total) // 10הארגומנט הראשון הוא המצטבר ההתחלתי. הסגירה מקבלת את המצטבר המצטבר ואת האיבר הבא, ומחזירה את המצטבר החדש. הערך הסופי של המצטבר הוא התוצאה.
עבור אופרטורים אריתמטיים, Swift מאפשרת לך להשתמש בקיצור המבוסס על סמלים:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24reduce לא חייבת להחזיר מספר. המצבר יכול להיות מכל טיפוס, לפי בחירתך:
let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence) // "hi!there!"אתגר
קלקרא שורת קלט אחת: רשימה של מספרים שלמים המופרדים בפסיקים. השתמש ב־reduce עבור כל אחד מהם והדפס שלוש שורות:
- הסכום
- המכפלה
- הערך המרבי (השתמש בסגירה שמחזירה את הגדול מבין שני הארגומנטים, אל תקרא ל־
.max())
נניח שיש לפחות איבר אחד. כדי למצוא את הערך המרבי, אפשר להשתמש ב־nums[0] כצובר התחלתי ולצמצם את שאר המערך.
עבור הקלט 3,7,2,8,4, הפלט הוא:
24
1344
8נסו בעצמכם
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: לחשב סכום, מכפלה ומקסימום באמצעות reduce
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
5פונקציות מסדר גבוה חלק 1
מיפוי (Map)סינון (Filter)צמצום (Reduce)שרשור map, filter ו-reduceסיכום – סטטיסטיקות מיליםתרגלו בעצמכם: Swift אונליין